亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 371 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號