Литеральный объект и конструктор функции - PullRequest
0 голосов
/ 22 августа 2011

Я прошел этот тест на 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);

Ответы [ 5 ]

1 голос
/ 22 августа 2011

Честно говоря, лучшее, что я нашел, - это микс:

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());
1 голос
/ 22 августа 2011

Какой из них вы предпочитаете. Скорость никогда не должна беспокоить, если она не станет реальной проблемой в вашем приложении. То, что вы делаете, для меня выглядит преждевременной оптимизацией, что является пустой тратой времени. Подождите, пока вам не понадобится оптимизировать ваш код, а затем оптимизируйте части, которые необходимо переработать. Это тривиально.

0 голосов
/ 22 августа 2011

Я сомневаюсь, что вы будете делать что-то достаточно интенсивное, чтобы разница имела значение.

Конструкторы стилей функций дают вам возможность приватных переменных, что приятно.

0 голосов
/ 22 августа 2011

ну, хром занимает около 17% доли рынка согласно wikipedia . Так что используйте литералы.

0 голосов
/ 22 августа 2011

Chrome использует оптимизацию под названием hidden classes, которая позволяет ему быстрее получать доступ к элементам объекта.

Держу пари, что эта оптимизация включается только тогда, когда объект создается с помощью new, и в результате объект, сконструированный с помощью new, будет иметь более быстрый доступ к элементу, чем объект, не сконструированный с помощью new.

...