我想通过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();
这样的结果将是:
被召唤
x:0
被召唤
x:5
这里是jfiddle脚本:http://jsfiddle.net/mqDa6/2/
答案 0 :(得分:1)
使用Function.prototype.bind()
像这样:
callObject.call(object.setX.bind(object));
bind()
方法创建一个新函数,当被调用时,它具有它this
关键字设置为提供的值,具有给定的序列 调用新函数时提供的任何参数。
答案 1 :(得分:1)
使用fiddle更新了apply method(使用call,jQuery.proxy,bind可以实现相同)以维持正确的范围:
var callObject = {
call: function(func) {
// Needs scope object as first parameter.
func.apply(object, [3]);
}
}
这样,通过使用这些方法中的任何一种,我们都可以指定我们的函数应该解析的范围。
Here是一篇很棒的文章,提供了有关这方面的更多细节。