文字对象和函数构造函数
Literal object and function constructor
我在http://jsperf.com/literal-obj-vs-function-obj和Literal在FF6, Opera 10, IE8上获胜,但Function方法在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);
说实话,我发现最好的是混合:
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());
随你喜欢。除非速度在你的应用中成为一个真正的问题,否则它永远不应该成为一个问题。在我看来,你所做的是过早的优化,这是浪费时间。等到需要优化代码时,再优化需要返工的部分。
Chrome使用一种称为hidden classes
的优化,使其能够更快地访问对象成员。
我敢打赌,只有当对象通过new
构造时才启用这种优化,因此,通过new
构造的对象将比不通过new
构造的对象具有更快的成员访问。
根据维基百科,chrome大约有17%的市场份额。所以使用文字
我怀疑你是否会做足够密集的事情来产生差异。
函数风格的构造函数给了你私有变量的选项,这很好。
相关文章:
- 构造函数函数闭包变量
- 构造函数函数中的自执行函数的OO上下文/范围
- 为什么在构造函数函数中使用此关键字
- 正在将构造函数函数迁移到TypeScript
- 获取构造函数函数的最佳方式是在JavaScript中使用带名称空间的字符串表示
- 为什么可以't我使用'var'在构造函数函数中
- 获取自定义对象构造函数函数名
- 在构造函数函数中创建只读(get)属性
- 正在检查类型构造函数函数
- Javascript中的内置构造函数函数
- 如何在JavaScript中的函数(函数本身就是一个参数)中传递参数
- 构造函数函数原型可枚举
- 为什么要设置原型's构造函数转换为其构造函数函数
- 从另一个javascript程序调用函数-函数式编程
- 构造函数函数.可以't覆盖对全局变量的引用
- 使用构造函数函数的Javascript继承
- 从数组构造生成器函数
- 如何创建DOM's构造函数函数
- 使用构造函数函数添加和删除项的数据结构
- 在NodeJS中构造helper函数的最佳方式