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

时间:2015-11-04 23:13:57

标签: javascript object object-literal

最近我尝试使用object literal创建一个对象。我需要一个在对象中使用另一个属性的属性。喜欢这个

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

this.property1中的undefinedproperty2

我知道很多方法可以解决这个问题。我的问题是幕后发生了什么?换句话说,javascript引擎如何解释对象文字?我知道“吊装”发生在功能中。 “吊装”是否发生在对象文字中?

感谢。

1 个答案:

答案 0 :(得分:2)

这就是发生的事情:

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的某些特殊属性不会让您感到困惑。