Будет ли это скопировать объект или добавить ссылку на него? - PullRequest
0 голосов
/ 28 сентября 2011

Допустим, у меня есть следующий объект:

var lol = {
    section: {},
    other: {foo: 'bar', foob: 'baz'}
};

Теперь, если я сделаю следующее:

lol.section.other = lol.other;

будет сделана ссылка, связывающая section.other с other или будет скопирован весь объект other и помещен в section?

Ответы [ 3 ]

8 голосов
/ 28 сентября 2011

Вы создаете две ссылки на один и тот же объект.

Объекты Javascript никогда неявно копируются.

2 голосов
/ 28 сентября 2011

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

Там, где JavaScript отрывается от других языков ОО, находится в наследовании и инкапсуляции.Так что будьте осторожны в этих областях.

1 голос
/ 28 сентября 2011

Как сказал SLaks, javascript назначает объекты в качестве ссылки (без копирования). Это легко проверить или увидеть себя:

var lol = {
    section: {},
    other: {foo: 'bar', foob: 'baz'}
};

lol.section.other = lol.other;

lol.other.foo = 'test';
console.log(lol.section.other.foo);   // will be 'test', not 'bar'

Вы можете увидеть это здесь: http://jsfiddle.net/jfriend00/r73LH/.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...