0

我在http://jsperf.com/literal-obj-vs-function-obj上进行了这个测试,Literal在 FF6、Opera 10、IE8 上获胜,但在 Chrome 13.0.782.112 上的Function方法更快,所以哪个更好使用方法?

var A = {
    aa : function(){
        var i, j=[];
        var arr = ['Literal', 'Function'];
        for (i = 0; i < arr.length; i++){
            j[i] = arr[i];
        }
       return j[0];
    }
};
var A1 = A;
var A2 = A1;
A1.foo = ' Test';
alert(A1.aa() + A2.foo);

//Function test
function B(){
    this.bb = function(){
        var i, j=[];
        var arr = ['Literal', 'Function'];
        for (i = 0; i < arr.length; i++){
            j[i] = arr[i];
        }
        return j[1];
    }
}
var B1 = new B();
var B2 = new B();
B.prototype.foo = ' Test';
alert(B1.bb() + B2.foo);
4

5 回答 5

1

无论你喜欢哪一个。速度永远不应该成为一个问题,除非它成为你的应用程序中的一个真正问题。你正在做的事情对我来说看起来像是过早的优化,这是浪费时间。等到你需要优化你的代码,然后再优化需要返工的部分。这是微不足道的。

于 2011-08-22T18:48:12.440 回答
1

说实话,我发现的最好的是混合:

function C() {
    var i, j = [],
        foo;

    return {
        bb: function() {

            var arr = ['Literal', 'Function'];
            for (i = 0; i < arr.length; i++) {
                j[i] = arr[i];
            }
            return j[1];
        },
        setFoo: function(val) {
            foo = val;
        },
        getFoo: function() {
            return foo;
        }
    }
}
var C1 = C();
var C2 = C();
C2.setFoo(' Test');
console.log(C1.bb(), C2.getFoo());
于 2011-08-22T18:49:24.303 回答
0

Chrome 使用一种称为优化的方法hidden classes,可以更快地访问对象成员。

我敢打赌,只有在通过构造对象时才启用此优化new,因此通过构造new的对象比不通过构造的对象具有更快的成员访问权限new

于 2011-08-22T18:48:26.970 回答
0

好吧,根据维基百科,chrome 拥有大约 17% 的市场份额。所以使用文字。

于 2011-08-22T18:48:33.800 回答
0

我怀疑您是否会做任何足够密集的事情以使差异变得重要。

函数样式的构造函数为您提供了私有变量的选项,这很好。

于 2011-08-22T19:04:45.267 回答