从其他类(javascript)调用方法时获取方法对象的引用

时间:2014-02-07 09:55:01

标签: javascript events reference

我想通过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/

2 个答案:

答案 0 :(得分:1)

使用Function.prototype.bind()像这样:

callObject.call(object.setX.bind(object));
  

bind()方法创建一个新函数,当被调用时,它具有它   this关键字设置为提供的值,具有给定的序列   调用新函数时提供的任何参数。

答案 1 :(得分:1)

使用fiddle更新了apply method(使用calljQuery.proxybind可以实现相同)以维持正确的范围:

var callObject = {

    call: function(func) {
        // Needs scope object as first parameter.
        func.apply(object, [3]);
    }
}

这样,通过使用这些方法中的任何一种,我们都可以指定我们的函数应该解析的范围。

Here是一篇很棒的文章,提供了有关这方面的更多细节。