我想通过 callObject 的事件处理程序从对象调用方法。但是,如果我从另一个类内部调用方法 object.setX(),对“this”的引用就会丢失。我怎样才能仍然引用该对象,该方法是在其中构造的?
var object = {
init: function () {
this.x = 0;
},
setX: function (value) {
$('body').append('got called</br>');
this.x = value;
},
printX: function () {
$('body').append('x: ' + this.x + '</br>');
}
}
var callObject = {
call: function (func) {
func(3);
}
}
object.init();
callObject.call(object.setX);
object.printX();
object.setX(5);
object.printX();
结果将是:
got called
x: 0
got called
x: 5
这是 jfiddle 脚本:http://jsfiddle.net/mqDa6/2/
最佳答案
已更新fiddle ,使用apply method (同样可以使用 call 、 jQuery.proxy 、 bind 来实现)以保持正确的范围:
var callObject = {
call: function(func) {
// Needs scope object as first parameter.
func.apply(object, [3]);
}
}
这样,通过使用这些方法中的任何一个,我们就可以指定我们的函数应该解析到的范围。
Here是一篇很棒的文章,提供了有关这方面的更多详细信息。
关于javascript - 当从其他类调用方法时,获取对方法对象的引用(javascript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21624474/