Javascript 我应该在';中使用绑定还是关闭别名;这个';?

Javascript 我应该在';中使用绑定还是关闭别名;这个';?,javascript,coding-style,Javascript,Coding Style,我可以创建一个变量或进行绑定。最好的解决方案是什么 var object = { log: function (s) { console.log(s); }, run: function () { var self = this; setTimeout( function () { self.log('test'); }, 1000

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

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

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

Function.prototype.bind函数是一个全新的函数,因此在使用前请检查兼容性表

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

为了可读性,我更喜欢绑定。

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

但是正如Dan Lee所说:Function.prototype.bind

也许你两个都可以
或者。

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

考虑到这一点,您最好(IMHO)利用语言特性,只需关闭您自己需要的变量即可。您将避免函数调用


如果您不控制正在调用的函数的源,并且需要设置此,或者如果您想提供其他参数,则使用
.bind
非常有用。

什么是最佳?这两种解决方案都有效,并且会产生相同的结果。难道没有任何东西可以让一种方案比另一种更好吗?再说一遍,你说的更好是什么意思?可读性?性能?有什么理由选择一个而不是另一个?所有这些原因加起来又如何呢?
Function.prototype.bind
。所以这取决于你关心什么。
var object = {
    log: function (s) {
        console.log(s);
    },
    run: function () {
        setTimeout(
            function () {
                this.log('test');
            }.bind(this), 1000
        );
    }
};
object.run();