Что произошло, когда движок JavaScript интерпретировал объектный литерал?
Недавно я попытался создать объект, используя литерал объекта. И мне нужно свойство, которое использует другое свойство в объекте. Как это
var object = {
property1:'property1',
property2:'property2 is from ' + this.property1
};
console.log(object.property2);// property2 is from undefined
this.property1
является undefined
в property2
,
Я знаю много способов справиться с этой проблемой. Мой вопрос: что происходит за кулисами? Другими словами, как движок JavaScript интерпретирует объектный литерал? Я знаю, что "подъем" происходит в функции. Происходит ли "подъем" в литерале объекта?
Благодарю.
1 ответ
Вот что происходит:
this
относится к области, в которой работает ваш код.
Точно так же в этом коде:
var a = 42;
var o = {
key: a
};
a
определяется из текущей области, this
ссылка в вашем коде разрешена this
относится к "внешнему" литералу объекта. (цитаты с "outside"
используются, так как нет никакого "внутри" или "снаружи" литерала - весь код выполняется в текущей области видимости).
Так что технически ваш код может быть преобразован в нечто вроде
var a = this;
var object = {
property1:'property1',
property2:'property2 is from ' + a.property1
};
или даже
var p = this.property1;
var object = {
property1:'property1',
property2:'property2 is from ' + p
};
так что некоторые особые свойства this
тебя не смутило.