一种更快捷的方式来替换javascript中的绑定

时间:2013-05-28 14:39:51

标签: javascript performance-testing

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

1 个答案:

答案 0 :(得分:2)

http://jsperf.com/apply-verses-bind/3

正如您所看到的,我已经运行了几种情况,但事实证明,包装函数并在范围上调用函数是最快的(比bindapply快约2倍)。 / p>

对于那些懒得查看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]();
        }
    }
};

繁荣,超级绑定:)