2

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

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 函数比较新,使用前请检查兼容性表。

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

我更喜欢 bind 更好的可读性。

4

2 回答 2

2

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

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

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

于 2013-10-30T10:02:59.923 回答
0

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

然而,正如 Dan Lee 所说: Function.prototype.bind并非在所有浏览器中都兼容

也许您可以使用下划线 bindjQuery proxy

于 2013-10-30T10:02:36.043 回答