Комментариями помечена проблема var obj = {a:2}; obj.b = 3; var obj2 = { y: obj.b + obj.a, d: y //не могу свойству d присвоить значение свойства y }; //obj2.d = obj2.y; //а вот так могу console.log(obj2.y); console.log(obj2.d); Не могу свойству d объекта obj2 присвоить значение свойства y этого же объекта.
Ответ
Смотрите в чем ошибка: 1)this указывает на контекст исполнения, т.е когда вы делаете var obj2={ d:this.y } то, this указывает на объект window. 2) когда пишете так var obj2={ y: 'ололололо', d:y } то в цепочке областей видимости(Scope chain) переменной "y" нет, однако, если вы сделаете так: var y = '2' var obj2={ y: 'ололололо', d:y } то получите свойство "d" со значением 2. Новое звено в цепочке видимости происходит при вступление в новый контекст исполнения... Можете использовать конструктор, тогда this будет указывать на новоявленный объект: function Foo(){ this.x = 'lol', this.y = this.x } b = new Foo(); console.log(b.y)
Комментариев нет:
Отправить комментарий