在javascript中替换bind的更快更干净的方法

在javascript中替换bind的更快更干净的方法,javascript,performance-testing,Javascript,Performance Testing,所以我想知道绑定和应用哪个更快?是否有具体的证据(我在jsperf上玩了大约一个小时,回答如下)。 正如您所看到的,我已经运行了几种情况,但事实证明,包装函数并在作用域上调用函数是最快的(大约比bind或apply快2倍) 对于那些懒得检查jsperf的人,这里是结果 var myObject = { count: 0, fn: function() { this.count += 1; } }; var bindFn = myObject.fn.bin

所以我想知道绑定和应用哪个更快?是否有具体的证据(我在jsperf上玩了大约一个小时,回答如下)。

正如您所看到的,我已经运行了几种情况,但事实证明,包装函数并在作用域上调用函数是最快的(大约比
bind
apply
快2倍)

对于那些懒得检查jsperf的人,这里是结果

var myObject = {
    count: 0,
    fn: function() {
        this.count += 1;
    }
};

var bindFn = myObject.fn.bind(myObject);
var applyFn = (function(fn, scope) {
    return function() {
        fn.apply(scope, []);
    }
})(myObject.fn, myObject);
var unboundFn = myObject.fn;
var preBound = (function(fn, scope) {
    return function() {
        scope[fn]();
    };
})('fn', myObject);
preBound
以大约2倍的速度获胜。于是我想到了一个很棒的实用程序类

return {
    superBind: function(fn, scope) {
        return function() {
            scope[fn]();
        }
    }
};

砰的一声,超级绑定:)

所以。。。这是什么意思?一个即时自我回答的问题以获得代表分数,还是您希望将其标记为社区维基?@LightStyle:允许自我回答。但问题很糟糕。这些“哪个更快”通常是毫无意义的,而且通常与实现和版本有关。好吧,我一直在用javascript开发非常复杂的应用程序,我发现
bind
apply
函数在代码中使用(特别是对于回调和观察)。第二,对于光的风格,我不知道还有其他的方式。我去问了一个问题,决定做研究,发现我可以自我回答。因为这是,至少我会考虑,一个很好的回答上面的问题。我把上面的问题改写得很简单,直截了当,以便得到下面的答案。如果这还不够,我可以改变这一点。我知道自我回答是允许的,我不知道有可能发布一个问题,并在大约5秒钟内回答它。不管怎么说,我只是想知道你是想让它获得声誉还是被设置为社区维基。如果是这样,你应该联系主持人(我不知道怎么做)。但是如果你只是为了名誉好。。。那不好;)哪个更快?他们是两个完全不同的东西!两件事。有趣的是,我的问题是-1,答案是+2。。。第二件事:通常需要为函数设置范围。应用还是绑定更好?还有其他选择吗?这就是我的目标。
.apply()
.bind()
是两件截然不同的事情,尽管您可以使用
.apply()
作为创建类似
.bind()
的功能的一部分。提出的问题毫无意义。我不知道你为什么希望在你的问题和答案上获得平等的票数,但两者都不好。。。比如说“…对于那些懒得查看jsperf的人来说…”,答案应该是这样的:一个人不需要通过链接来获取信息。我不同意你的说法。这不是提问的一部分。这让我想起了那些愿意为
{
if
语句处于同一行或以下位置。这是一个简单的风格偏好。链接到一个可信的站点,其中包含大量的图形、代码、执行的代码等,有助于提出有根据的问题。
bind
apply
可以完成一些非常类似的任务,同时也是一个巨大的问题消耗性能。如果你构建性能要求的应用程序,那么这可能是一个问题。提问时不需要什么?我没有给出任何提问要求。我只是说你提出的问题没有什么意义。