this и литеральная нотация
Закончил учебник ч.1, но не смог найти ответа на следующий вопрос.
Почему следующей код возвращает "undefined" вместо значения свойства? var obj = { foo: 15, bar: this.foo }; obj.bar //undefined вместо 15 Я понимаю что нужно поместить "this.foo" в тело функции, но не до конца понимаю почему this в данном случае получает глобальный объект. Тот же объект созданный при помощи оператора new - передает контекст как и ожидается. |
В конце кода добавьте alert(this) и посмотрите, что там находится
|
this - это объект window, this.foo == window.foo == foo из глобальной обласьти видимости
|
Вы должно быть недостаточно внимательно прочитали вопрос. Я ведь написал что в данном случае this получает глобальный объект. Почему при создании объекта с помощью литеральной нотации - this получает window?
|
Цитата:
|
Цитата:
|
Цитата:
var o = {a: 1, b: this.a} // fail var o = {a: 1} o.b = o.a; // good var o = {a: 1, get b() {return this.a}} // good |
Цитата:
|
потому что литеральная нотация описана в контексте window - кэп
var obj = {тутИмяСвойства: a(тут).тo[что].вернет(это, выражение, выполненное * (в[текущем] + контексте) )} |
megaupload,
Спасибо, просто для меня это было не так очевидно, помогла Ваша фраза "нотация описана в контексте window" и соответственно следующий код, из которого видно что для нотации важен контекст объявления (например при использовании оператора new - не важно в каком контексте мы инициализируем объект): var A = function(){ this.b = 15; this.c = { d : this.b, b : 24 } }; var obj = new A; obj.c.d //15 danik.js, и где же в моем примере функция вызывается в контексте window? devote, спасибо за познавательный пример с геттером. |
Часовой пояс GMT +3, время: 06:41. |