Другие ответы, опубликованные здесь, лучше, но вот альтернатива:
- Устанавливает значение при инициализации (не получатель, или производный, и т. Д.)
- Не требует какого-либо типа
init()
или кода вне литерала объекта
- Является литералом объекта, а не фабричной функцией или другой механикой создания объекта.
- Не должно влиять на производительность (кроме как при инициализации)
Самовыполняющиеся анонимные функции и хранилище окон
var foo = {
bar:(function(){
window.temp = "qwert";
return window.temp;
})(),
baz: window.temp
};
Заказ гарантированный (bar
до baz
).
Конечно, это загрязняет window
, но я не могу представить, чтобы кто-то писал сценарий, который требует window.temp
, чтобы быть стойким. Может быть tempMyApp
, если вы параноик.
Это также безобразно, но иногда полезно. Например, когда вы используете API с жесткими условиями инициализации и не чувствуете необходимость рефакторинга, поэтому область видимости верна.
И сухо, конечно.