如下所示, 得到的结果里面, 第二个this指向的是window这个全局对象而非f2, 原因就是多层this造成的指向不明引起的.

var a = { 
    f1: function(){ 
        console.log(this); 
        var f2 = function(){ 
            console.log(this); 
        }; 
        f2(); 
    } 
}; 
 
a.f1();  
// Object 
// Object

 

上面这段代码的实际运行效果其实是这样的: 

var test = function(){ 
    console.log(this); 
} 
 
var a = { 
    f1: function(){ 
        console.log(this); 
        var f2 = test; 
        f2(); 
    } 
}; 
 
a.f1();  
// Object 
// Object

 

但我们需要的效果是他指向a对象, 而不是window, 解决方法是通过另一个变量将this固定住:

var a = { 
    f1: function(){ 
        console.log(this); 
        var self = this; 
        var f2 = function(){ 
            console.log(self); 
        }; 
        f2(); 
    } 
}; 
 
a.f1();  
// Object 
// Object

 

这里使用了一个变量: self, 将a对象的this固定住, 利用函数作用域可以访问父级作用域内变量这一特点, 实现this的传递.

评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!