javascript 引擎解释对象文字时发生了什么?

What happened when javascript engine interpret object literal?

最近我尝试使用对象字面量创建一个对象。我需要一个在对象中使用另一个 属性 的 属性。像这样

var object = {
    property1:'property1',
    property2:'property2 is from ' + this.property1
};
console.log(object.property2);// property2 is from undefined

this.property1property2中的undefined

我确实知道很多处理这个问题的方法。我的问题是幕后发生了什么?换句话说,javascript 引擎如何解释对象字面量?我知道 "hoisting" 发生在函数中。 "hoisting" 是否出现在对象字面量中?

谢谢。

事情就是这样:

this指的是你的代码所在的范围运行.

此代码中的方法相同:

var a = 42;

var o = {
    key: a
};

a 从当前范围解析,代码中的 this 引用解析为任何 this 引用对象文字的 "outside"。 (使用带 "outside" 的引号是因为没有任何 "inside" 或 "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 的一些特殊属性不会让您感到困惑。