您的位置:首页 > Web前端 > JavaScript

JS笔记-this的各种用法

2015-06-05 17:01 645 查看
在面向对象编程语言中,在就出现了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指向的对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: