我应该使用bind还是为'this'关闭别名?

时间:2013-10-30 09:51:23

标签: javascript coding-style

我可以创建变量或进行绑定。什么是最好的解决方案?

var object = {
    log: function (s) {
        console.log(s);
    },
    run: function () {
        var self = this;
        setTimeout(
            function () {
                self.log('test');
            }, 1000
        );
    }
};
object.run();

或:

var object = {
    log: function (s) {
        console.log(s);
    },
    run: function () {
        setTimeout(
            function () {
                this.log('test');
            }.bind(this), 1000
        );
    }
};
object.run();

更新: 有很多方法可以决定这一点。兼容性,性能和可读性方面是最重要的。

Function.prototype.bind函数很新,所以在使用前请检查兼容性表。

关于表现最好使用自我。多次调用函数时,bind可能会更好,但这超出了这个问题的范围。

我更喜欢使用bind来提高可读性。

2 个答案:

答案 0 :(得分:2)

如果你检查Function.prototype.bind shim at MDN的来源,你会注意到它在它返回的函数中形成了对几个变量的闭包。

鉴于此,你也可以(恕我直言)利用语言功能,只需关闭你自己需要的变量。你将避免函数调用。

当您不控制正在调用的函数的来源并且需要设置.bind或者您需要时,使用this 非常有用提供额外的参数。

答案 1 :(得分:0)

没有真正的"最佳解决方案"这里;两种选择都有效。我个人喜欢var self = this;因为代码不那么冗长,通常符合目的。

然而正如Dan Lee所述:Function.prototype.bind is not compatible through all browsers

也许您可以使用underscore bindjQuery proxy