fen*_*ent 25 javascript object
我正试着做些喜欢的事情
o = {
a: { foo: 42 },
b: o.a
}
Run Code Online (Sandbox Code Playgroud)
但是这会返回一个错误,表示o未定义.我知道我以后可以做ob = oa但是我想知道在我定义o时是否可以定义b.
Mat*_*all 33
正如@RobG评论的那样 - 不,你不能.
但是,您可以使用this定义为对象属性的函数内部的关键字,如下所示:
o = {
a: { foo: 42 },
b: function () {
return this.a;
}
}
console.log(o.b()); // {foo: 42};
Run Code Online (Sandbox Code Playgroud)
小智 18
现在这只是古老的历史,但我刚刚了解了适合你情况的吸气剂和吸尘剂,我相信看看这个问题的人可以从中获得一些价值.
o = {
a: { foo: 42 },
get b() {
return this.a
}
}
console.log(o.b) // => { foo: 42 }
Run Code Online (Sandbox Code Playgroud)
Mik*_*uel 11
这不可能.
在评估属性值时,对象不会绑定到EcmaScript表达式可见的任何范围.
EcmaScript语言规范的第11.1.5节解释了对象构造函数语法的工作原理.
下面描述如何创建对象作为评估第一个属性键值对的副作用
生产
PropertyNameAndValueList : PropertyAssignment评估如下:
- 设obj是创建一个新对象的结果,就像表达式
new Object()where那样Object是具有该名称的标准内置构造函数.- 让propId成为评估PropertyAssignment的结果.
- 调用的[[DefineOwnProperty]]内部方法的obj与参数
propId.name,propId.descriptor和false.- 返回obj.
需要注意的是PropertyAssignment被评估后OBJ被创建,但OBJ从未绑定到一个ECMAScript表达式访问的任何名称.
只有在评估了所有属性值之后,才会分配给o程序中的任何符号或任何其他符号.
| 归档时间: |
|
| 查看次数: |
10561 次 |
| 最近记录: |