Как получить свойство объекта в JS?

Рейтинг: 2Ответов: 1Опубликовано: 10.04.2015

Объясните, почему в таком коде как:

obj = {
    x: 10,
    y: this.x + 20
}

obj.x = 10, а obj.y = NaN. Хотя, если написать так:

obj = {
    x: 10,
    y: 20,
    foo: function() {return this.x + this.y}
}

obj.foo() = 30.

Как мне присвоить полю объекта другое поле этого же самого объекта?

Ответы

▲ 3Принят

В первом случае this - это не obj, а во втором вы вызываете метод объекта obj

Касаемо первого случая, если данный фрагмент кода выполняется в глобальном контексте или в функции, то this == window (если это браузер конечно) или объект для которого вызывается метод если этот фрагмент находится в методе.

По поводу второго вопроса могу предложить следующее:

obj = {};
obj.x = 10;
obj.y = obj.x + 20;

Добавлено: Еще к первому фрагменту. Посмотрите что будет если

x = 15;
obj = {
    x: 10,
    y: this.x + 20
}
alert(obj.y);