加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 服务器 > 系统 > 正文

怎样解决多层this指向全局对象window的问题

发布时间:2021-01-08 16:35:45 所属栏目:系统 来源:网络整理
导读:如下所示,得到的结果里面,第二个this指向的是window这个全局对象而非f2,原因就是多层this造成的指向不明引起的. var a = { f1: function(){ console.log(this); var f2 = function(){ console.log(this); }; f2(); }};a.f1(); // Object// Object ? 上面这

如下所示,得到的结果里面,第二个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的传递.

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读