2009-08-25 93 views
1

我有一個類創建一個錨點對象。當用戶點擊錨時,我希望它從父類運行一個函數。Javascript成員函數超出範圍

function n() 
{ 
    var make = function() 
    { 
     ... 

     var a = document.createElement('a');  
     a.innerHTML = 'Add'; 
     //this next line does not work, it returns the error: 
     //"this.add_button is not a function" 
     a.onclick = function() { this.add_button(); }            

     ... 
    } 

    var add_button = function() 
    { 
     ... 
    } 

} 

我該如何做到這一點?

回答

5

看起來你只是需要擺脫「這個」。在前面的add_button()

你正在聲明add_button作爲局部變量(或私人在奇怪的方式,JavaScript類工作),所以它實際上不是「this」的成員。

只需使用:

a.onclick = function(){add_button();} 
+0

+1。希望他不需要add_button裏面這個指針的值,但這是一顆好星。 – Triptych 2009-08-25 17:52:54

+0

在這種情況下,我沒有。 :) – Ian 2009-08-25 17:57:31

0

的 「本」,在 「this.add_button();」實際上是指沒有「add_button()」函數的錨元素本身,如果我沒有弄錯的話。

也許這會工作:

a.onclick = function() { n.add_button(); } 
1

它不工作的原因是thisonclick功能的情況下是不是在n功能/「下課」的情況下一樣this。如果你希望函數內的this等於來自類的this,你需要綁定this來函數。

綁定是一種改變函數範圍的方法 - 基本上,如果綁定到一個函數,那麼您將替換this變量指向其他內容。你可以在this alternateidea article中閱讀更多關於Javascript綁定的內容。

如果您使用prototype,例如,你可以這樣做:

function n() 
{ 
    var make = function() 
    { 
     ... 
     a.onclick = function() { this.add_button() }.bind(this); 
     ... 
    } 
} 

這將綁定類nthis到的onclick功能,從而給你想要的效果。

+0

有趣.... – Ian 2009-08-25 18:05:16