假设我有一个功能:
function test(){}
test.prototype.method01=function(){
//do something
}
test.prototype.method02=function(){
//how can I call the method01?
//this.method01()...?
//but the chrome through an error:
//Uncaught TypeError: Object #<HTMLImageElement> has no method 'method01'
}
编辑: 事实上,method01是这样的:
test.prototype.method02=function(){
$('.cpy').resizable({
}).draggable({
start:function(e,ui){
this.method01();
}
});
}
答案 0 :(得分:13)
test.prototype.method02=function(){
var testThing = this;
$('.cpy').resizable({
}).draggable({
start:function(e,ui){
testThing.method01();
}
});
}
您必须在另一个局部变量中保留this
引用,以便回调函数在调用其他方法时可以使用它。 this
引用绑定在每个函数调用上,包括调用回调函数,例如您在“.draggable()”设置中使用的函数。当名为this
的内容设置为与“method02”函数中的this
不同时。
答案 1 :(得分:2)
是的,你可以在词法范围内手动缓存this
,就像这个问题中提出的其他答案一样。但是,我建议的替代方法是使用$.proxy
或function.bind
作为回调来创建绑定方法。
始终使用稳定的this
调用绑定方法。我发现它们比更高范围内this
的奇怪命名引用更具可读性
答案 2 :(得分:0)
关于什么
test.prototype.method02=function(){
this.method01.apply(this);
// do some other stuff
}