我有一个创建锚对象的类。当用户点击锚时,我希望它从父类运行一个函数。
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()
{
...
}
}
我怎样才能完成这项工作?
答案 0 :(得分:5)
看起来你只需要摆脱“这个”。在add_button()
之前您将add_button声明为局部变量(或以javascript类工作的奇怪方式私有),因此它实际上不是“this”的成员。
只需使用:
a.onclick = function(){add_button();}
答案 1 :(得分:1)
它不起作用的原因是this
函数的上下文中的onclick
与this
函数/“类的上下文中的n
不同”。如果您希望函数中的this
与该类中的this
等效,则需要绑定 this
到该函数。
绑定是一种改变函数范围的方法 - 实际上,如果绑定到函数,则要替换this
变量以指向其他内容。您可以在this alternateidea article中阅读有关Javascript绑定的更多信息。
例如,如果您使用prototype,则可以执行以下操作:
function n()
{
var make = function()
{
...
a.onclick = function() { this.add_button() }.bind(this);
...
}
}
将类n
的{{1}}绑定到onclick函数,从而提供您想要的效果。
答案 2 :(得分:0)
“this.add_button();”中的“this”实际上是指锚元素本身没有“add_button()”函数,如果我没有弄错的话。
也许这会奏效:
a.onclick = function() { n.add_button(); }