JS笔记-this的各种用法
来源:互联网 发布:linux终端 java安装 编辑:程序博客网 时间:2024/05/16 13:39
在面向对象编程语言中,在就出现了this对象。在Javascript中,也有this对象,但情况就相比复杂多了。
一般地说,this对象引用的是函数据以执行的环境对象。
坊间传言:this就是指向最近的对象。谁是对象而且离this最近,this就指向谁。这个是很表层的说法。
而深层的说法,指的是:this指针代表的是执行当前代码的对象的持有者。
比如以下代码:
var hi = "I am window"; function sayHi(){ var hi = "I am sayHi"; alert(this.hi); }sayHi();
或者大家会以为结果是I am sayHi。但是实际上是I am window,意味着this指向的是window对象。
我认为大家先要了解什么叫做环境对象。在我的理解里,环境对象指的是:在a环境下执行函数,a即为函数的环境对象。上面sayHi函数,实际上是在window对象中执行的,因此this调用的也是window对象中的变量hi。
在下面的情况下,this的指向就变了。
var hi = "I am window"; function sayHi(){ var hi = "I am sayHi"; alert(this.hi); } var o = { hi : "I am O" }; o.sayHi = sayHi; o.sayHi(); sayHi();这里的结果是I am O。
实际上我们可以这样理解:在前一段代码中,执行sayHi()的时候,其实JS内部解释的时候有我们尚未加上的前缀window.。完整的调用应该是:window.sayHi();而第二段代码中则是o.sayHi()。this对象可以说就是指向调用该函数的那个对象,即window和O。
P.S.:在调用this时,并不能认为函数也是一个对象。函数对象并不能在this中占有一席的位置,大家请看下面的代码:
var hi = "I am window"; function sayHi(){ var hi = "I am sayHi"; function sayHello(){ alert(this.hi); } sayHello(); } sayHi();
这里的运行结果是:I am window。但是sayHello()是在sayHi()里面执行的啊。大家可以这样想,我们能在JS里用形似sayHi.sayHello()这样的语法吗?答案是不可以的。因此,sayHi在这里也就不算是一个可以被this指向的对象。
0 0
- JS笔记-this的各种用法
- js this 的用法
- js this的用法
- JS this的用法
- js的this用法
- js 中 this 的用法
- js中this的用法
- js中this的用法
- js中this的用法
- js中this的用法
- JS中this的用法
- js中this的用法
- js中this的用法
- js中this的用法
- js中this的用法
- JS中THIS的用法
- js中this的用法
- js中this的用法
- 图书馆管理系统——模板建立
- Android_View(视图)绘制不同状态背景图片原理深入分析以及StateListDrawable使用详解
- MapReduce理论简介
- html5手机网站需要加的那些meta/link标签,html5 meta全解
- JAVA WEB项目中文乱码问题解决方案
- JS笔记-this的各种用法
- MFC绘图概述
- leetcode--Pascal's Triangle
- html5+css3弹性框架--自适应
- Boa应用中报错:502 Bad Gateway The CGI was not CGI/1.1 compliant.
- iOS 应用内跳转到系统设置
- js PhotoSwipe库开源的手机版相册产品的Code.PhotoSwipe.attach方法使用
- oracle查看数据库大小
- activity四种启动方式