JS学习之this 01

143 阅读1分钟

this对象是在运行时基于函数的执行环境绑定的:

  • 在全局函数中,this等于window
  • 当函数被作为某个对象的方法调用时,this等于那个对象
  • 匿名函数的this通常指向window

我们重点来说一下匿名函数的this指向。

 var name = "The window";
 var object = {
    name:"My Object",
    getNameFunc:function () {
        return function () { //匿名函数
            return this.name;
        };
    }
};
alert(object.getNameFunc()());// "The window"

上述代码先创建了一个全局变量name,又创建了一个包含name属性的对象object。这个对象还包含一个方法——getNameFunc(),它返回的是一个匿名函数,匿名函数返回的是this.name。

匿名函数没有取得其包含作用域的this对象。

我们把其包含作用域的this对象保存在一个闭包能够访问到的变量里,就可以让闭包访问该对象了。

var name = "The window";
var object = {
    name:"My Object",
    getNameFunc:function () {
        var that = this;
        return function () {
            return that.name;
        };
    }
};
alert(object.getNameFunc()()); //"My Object"

在定义匿名函数之前,我们把this对象赋值给一个名叫that的变量,在定义闭包后,闭包也可以访问这个变量,因为它是我们在包含函数中特意声明的一个变量。

即便在函数返回之后,that也仍然引用着object,所以返回的就是My Object。

相当于this的值得以维持。