2009-08-25 84 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