将对象的方法作为回调传递的最佳或最常用的方法是什么?

时间:2015-02-11 22:13:16

标签: javascript function object callback

我遇到了需要将对象的方法作为回调传递的问题,该方法使用this。显然这不起作用,因为当作为回调调用(而不是通过拥有对象)时,this将指向全局对象。

我读到了这个问题的解决方案,我想知道最好或最常见的是什么。

目前,我的班级'看起来像这样:

function MyClass(value) {
    this.value = value;
}

MyClass.prototype.alertValue = function() {
    alert(this.value);
};

选项A - 将类更改为如下所示:

function MyClass(value) {
    this.value = value;

    this.alertValue = function() {
        alert(value);
    };
}

优点 - 简单。但缺点是alertValue将被复制到每个实例化中,这就是我们通常将方法放在prototype上的原因。

选项B - 使用.bind()

callbackReceivingFunction(myObject.alertValue.bind(myObject));

我可以为此编写一个实用工具方法:

function bind(object, methodName) {
    return object[methodName].bind(object);
}

解决此问题的最常用方法是什么?它的优点和缺点是什么?我提出的两种方式似乎都不优雅,还有另一种方式吗?

1 个答案:

答案 0 :(得分:1)

我建议使用bind()。请记住,IE< = 8不支持Function.prototype.bind(),因此您需要使用polyfill。如果必须为单个类绑定一堆方法,请查看Underscore/lodash's _.bindAll() method

例如:

_.bindAll(myObj, 'alertValue', 'otherMethod', 'anotherMethod')