2012-02-28 4 views
3

Что происходит за кулисами здесь для каждого скрипта. Предполагая, что я буду getsize() много, есть ли разница между кодом:Что это происходит за кулисами в этом коде?

Код 1:

function Size (width, height) 
{ 
    this.width = width; 
    this.height = height; 
} 

function getSize() 
{ 
    return new Size (0, 0); 
} 

Код 2

function getSize() 
{ 
    return {width: 0; height: 0}; 
} 

Я думаю, что они эквивалентны и во всех смыслах, но только хотел проверить.

+0

Первый возвращает объект 'Size', второй возвращает« стандартный »объект JS ??? В чем вопрос? – PeeHaa

ответ

2

В первом примере кода вы возвращаете именованный объект под названием «Размер», во втором коде вы возвращаете анонимный объект javascript. Таким образом, вы теряете конструктор объектов размера и прототип, чтобы препятствовать расширению всех подобных объектов.

1

Они (по существу) эквивалентны сейчас, но только до Size прототип изменений. Если изменения в любой момент в будущем, ваш {width: 0, height: 0} будет неправильным, так что, вероятно, лучше использовать return new Size(0, 0);

Единственное отличие в том, что Size объект является экземпляром другого объекта родового объекта JS:

var a = new Size(0,0); 
var b = {width:0, height:0}; 
alert(a == b) // would be false even if JS didn't always say two objects are different (see comments) 
+0

Замечание '==' немного запутанно, потому что «равные» объекты никогда не равны в этом смысле. '{}! == {}'. – pimvdb

+0

Хороший звонок - обновил ответ, чтобы сделать оправдание: P – Joe

Смежные вопросы