我在FF6,Opera 10,IE8上的http://jsperf.com/literal-obj-vs-function-obj和 Literal 获胜时进行了此测试,但Chrome 13.0.782.112上的功能方法更快,所以哪一个是更好的使用方法?
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);
答案 0 :(得分:1)
无论你喜欢哪一个。速度永远不应该是一个问题,除非它成为你的应用程序中的真正问题。你正在做什么看起来像是对我过早优化,这是浪费时间。等到您需要优化代码,然后优化需要重新加工的部件。这是微不足道的。
答案 1 :(得分: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());
答案 2 :(得分:0)
Chrome使用名为hidden classes
的优化,可以更快地访问对象成员。
我敢打赌,只有当对象是通过new
构造时才启用此优化,因此通过new
构造的对象比不通过{{new
构造的对象具有更快的成员访问权限。 1}}。
答案 3 :(得分:0)
嗯,根据wikipedia,铬约占市场份额的17%。所以使用文字。
答案 4 :(得分:0)
我怀疑你是否会采取足够强烈的措施来解决重要问题。
函数样式构造函数为您提供了私有变量的选项,这很不错。