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

标签 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();

结果将是:

got called

x: 0

got called

x: 5

这是 jfiddle 脚本:http://jsfiddle.net/mqDa6/2/

最佳答案

已更新fiddle ,使用apply method (同样可以使用 calljQuery.proxybind 来实现)以保持正确的范围:

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/

相关文章:

c++ - 为什么 std::reference_wrapper 不是默认可构造的?

c# - 错误 : Unable to load DLL '.dll' : The specified module could not be found.(HRESULT : 0x8007007E) - What is this error? 异常

c++ - 通过引用传递基本数据类型的速度优势 C++

javascript - 窗口.打开 POST

javascript - jQuery 和 CSS 下拉、悬停和下拉消失

javascript - 修改地址栏时可以得到事件吗?

javascript - iPhone - JavaScript 事件...用于 Three.js

javascript - 将 evt 监听器附加到动态创建的类

javascript - 如何从其他地方的脚本调用 Angular Controller 上的函数?

php - 在 HTML5 中显示之前加载内容