2015-11-17 56 views
2

我宣佈一個JavaScript對象:jQuery的覆蓋「這個」原型

function A(name){ 
    this.name=name 
} 

A.prototype.test=function(){ 
    console.log(this.name); 
}; 

,因爲我已經設置了一個按鈕,一個簡單的例子,如果它被點擊應輸出變量到本地控制檯日誌:

<button id='test'>test</button> 

腳本:

var t=new A('hello'); 
$('#test').click(t.test); 

當我按一下按鈕我想this.name展示(在這種情況下'hello'),而是this引用點擊按鈕,而不是我創建的對象。

當然這是一個調試腳本。在現實生活中,我將一個函數綁定到window.resize事件上,該事件將在重新調整大小時重新生成一個窗口。

有一個JSFiddle顯示該問題。

我有這一個解決方案,即是宣告調整大小(或點擊功能)在對象的構造和使用可替代的名稱爲this,像這樣(Here's the JSFiddle):

function A(name){ 
    this.name=name 

    var self=this; 
    $("#test").click(function(){ 
     console.log(self.name); 
    }); 
} 

但我'而是使用原型並將函數綁定到對象的構造函數中。我如何使用原型來做到這一點?

回答

3

您可以使用bind,將設置的this值的時間提前:

var t=new A('hello'); 
$('#test').click(t.test.bind(t)); 
+0

謝謝!這甚至可以從對象構造函數中調用:$(「#test」)。click(this.test.bind(this));正是我在找什麼! – patrick

+2

@patrick你剛纔說的沒有多大意義。這個調用確保''test'函數被't'調用爲'this'的值。它與調用'$('#test')類似(不完全相同)。click(function(){t.test()};' –

+0

Juan,你說得對,我測試了這個函數,魅力! – patrick