2015-11-04 76 views
1

最近我试图用对象文字创建一个对象。而且我需要一个在对象中使用另一个属性的属性。像这样当JavaScript引擎解释对象字面值时发生了什么?

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

this.property1property2undefined

我知道很多方法来处理这个问题。我的问题是幕后发生了什么?换句话说,JavaScript引擎如何解释对象字面值?我知道“提升”发生在函数中。 “提升”是否发生在对象文字中?

谢谢。

+0

'this'是函数作用域,而不是对象初始值设定项的作用域。 – Oriol

回答

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一些特殊的性质并没有迷惑你。

相关问题