Вот простая иллюстрация:
//Saul was born: Initialize the parent!
var parent = {
youngestChild: 'Small Saul'
};
//Tim was born: Overwrite the parent!
parent = {
youngestChild: 'Tiny Tim',
currentYoungestChild: parent.youngestChild
};
alert(parent.currentYoungestChild);
Кто такой parent.currentYoungestChild
?
Как и многие разработчики, я думал, что parent.youngestChild
будет установлен на 'Tiny Tim'
, прежде чем он будет установлен на parent.child
.Если бы это было так, было бы установлено 'Tiny Tim'
.
Однако, получается, что все дети оцениваются до того, как будут сохранены на их родителе , поэтому
parent.currentYoungestChild == 'Small Saul'
Здесь - скрипкаесли вы хотите попробовать это.
Одним из объяснений этой функциональности является то, что тогда порядок дочерних объявлений не имеет значения .Например, следующее будет иметь другой результат, если объекты будут оцениваться и храниться последовательно:
parent = {
currentYoungestChild: parent.youngestChild,
youngestChild: 'Tiny Tim'
};
Короче говоря: Инициализация дочерних элементов из других дочерних элементов в объявлении объекта не будет работать!