为了账号安全,请及时绑定邮箱和手机立即绑定

Javascript闭包和'这个'

Javascript闭包和'这个'

繁花不似锦 2019-09-03 15:36:58
我有一个问题,我创建的对象看起来像这样:var myObject = {    AddChildRowEvents: function(row, p2) {        if(document.attachEvent) {            row.attachEvent('onclick', function(){this.DoSomething();});        } else {            row.addEventListener('click', function(){this.DoSomething();}, false);        }    },    DoSomething: function() {        this.SomethingElse(); //<-- Error here, object 'this' does not support this method.    }}问题是当我进入'DoSomething'函数时,'this'不会引用'myObject'我做错了什么?
查看完整描述

3 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

当函数被调用时,“this”指的是行。如果你想拥有这个对象,你可以这样做:]


AddChildRowEvents: function(row, p2) {

    var theObj = this;

    if(document.attachEvent) {

         row.attachEvent('onclick', function(){theObj.DoSomething();});

    } else {

         row.addEventListener('click', function(){theObj.DoSomething();}, false);

    }

},

调用该函数时,它可以访问定义函数时在范围内的变量theobj。


查看完整回答
反对 回复 2019-09-03
?
慕村225694

TA贡献1880条经验 获得超4个赞

this总是指内部函数,如果你有嵌套函数,你必须创建另一个变量并指向它this。


var myObject = {

    AddChildRowEvents: function(row, p2) {

        var that = this;

        if(document.attachEvent) {

            row.attachEvent('onclick', function(){that.DoSomething();});

        } else {

            row.addEventListener('click', function(){that.DoSomething();}, false);

        }

    }

}


查看完整回答
反对 回复 2019-09-03
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

这是闭包的常见问题。要解决它尝试这样的事情:


var myObject = {    

    AddChildRowEvents: function(row, p2) { 

        var self = this;


        if(document.attachEvent) {            

             row.attachEvent('onclick', function(){this.DoSomething(self);});        

        } else {            

             row.addEventListener('click', function(){this.DoSomething(self);}, false);        

        }    

    },    


    DoSomething: function(self) {       

        self.SomethingElse(); 

    }

}


查看完整回答
反对 回复 2019-09-03
  • 3 回答
  • 0 关注
  • 344 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信