2013-02-24 89 views
0

我有一個關於以下代碼打印出「this.text」的問題。如何獲得回調在類範圍內使用「this」

我需要一個包裝功能,使其工作。這太麻煩了。

有沒有一種更簡單的方法(沒有額外的包裝)讓它工作?

function Class1() { 
    this.text = "test"; 
    } 

    Class1.prototype.show = function() { 
    console.log(this); 
    console.log(this.text); 
    } 

    var testClass = new Class1(); 

    function funWithCallBack(cb) { 
    cb(); 
    } 

    // it will show "undefined" because "this" scope changes to window 
    funWithCallBack(testClass.show); 

    function wrapper() { 
    testClass.show(); 
    } 

    // this one will work but troublesome 
    funWithCallBack(wrapper) 

回答

2

您可以使用這樣一個匿名函數:

// it will show "undefined" because "this" scope changes to window 
funWithCallBack(testClass.show); 

這樣:

// anonymous function to use the right object for the method 
funWithCallBack(function() { 
    testClass.show() 
}); 

出現你的問題,因爲當你通過testClass.show作爲回調,它只是獲得函數參考,並且與testClass無關。但是,您可以使用.bind()創建一個臨時函數,它們可以使用.bind()將它們綁定在一起,但它在某些較舊的瀏覽器中不受支持,這就是爲什麼我通常只使用匿名函數的原因。

.bind()實施應該是這樣的:

// use .bind() to make sure the method is called in the right object context 
funWithCallBack(testClass.show.bind(testClass)); 
+0

謝謝!有效 – 2013-02-24 05:30:12

相關問題