文字对象和函数构造函数

Literal object and function constructor

本文关键字:构造函数 函数 对象 文字      更新时间:2023-09-26

我在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%的市场份额。所以使用文字

我怀疑你是否会做足够密集的事情来产生差异。

函数风格的构造函数给了你私有变量的选项,这很好。