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.property1
是property2
中的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
的一些特殊属性不会让您感到困惑。
最近我尝试使用对象字面量创建一个对象。我需要一个在对象中使用另一个 属性 的 属性。像这样
var object = {
property1:'property1',
property2:'property2 is from ' + this.property1
};
console.log(object.property2);// property2 is from undefined
this.property1
是property2
中的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
的一些特殊属性不会让您感到困惑。