最近我尝试使用object literal创建一个对象。我需要一个在对象中使用另一个属性的属性。喜欢这个
var object = {
property1:'property1',
property2:'property2 is from ' + this.property1
};
console.log(object.property2);// property2 is from undefined
this.property1
中的undefined
为property2
。
我知道很多方法可以解决这个问题。我的问题是幕后发生了什么?换句话说,javascript引擎如何解释对象文字?我知道“吊装”发生在功能中。 “吊装”是否发生在对象文字中?
感谢。
答案 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
的某些特殊属性不会让您感到困惑。