我想做这样的事情:
var obj = {
a: 5,
b: this.a + 1
}
Run Code Online (Sandbox Code Playgroud)
(而不是5,有一个我不想执行两次返回数字的函数)
我可以重写它以便obj.b稍后分配obj.a,但是我可以在声明期间立即执行吗?
Ivo*_*zel 32
thisJavaScript中的编号不会像您认为的那样工作.this在这种情况下,指的是全局对象.
只有3种情况this设置了值:
功能案例
foo();
Run Code Online (Sandbox Code Playgroud)
这里this将引用全局对象.
方法案例
test.foo();
Run Code Online (Sandbox Code Playgroud)
在这个例子this中将参考test.
构造函数案例
new foo();
Run Code Online (Sandbox Code Playgroud)
以new关键字开头的函数调用充当构造函数.函数内部this将引用新创建的Object.
其他地方,this指的是全局对象.
ken*_*ken 10
有几种方法可以实现这一目标; 这是我会用的:
function Obj() {
this.a = 5;
this.b = this.a + 1;
// return this; // commented out because this happens automatically
}
var o = new Obj();
o.b; // === 6
Run Code Online (Sandbox Code Playgroud)
这应该返回正确的值:
function () {
var aVar = 5;
var bVar = aVar + 1;
return {
a : aVar,
b : bVar;
}
}();
Run Code Online (Sandbox Code Playgroud)
事实证明,除非第一个是函数,否则您不能在另一个对象中引用一个对象。但是你可以这样做。
var obj = {
a: 5
}
obj.b = obj.a + 1; // create field b in runtime and assign it's value
Run Code Online (Sandbox Code Playgroud)
如果你 console.log(obj) 你会有
obj = {
a: 5,
b: 6
}
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以为代码的其余部分保留对象字面量结构
| 归档时间: |
|
| 查看次数: |
14209 次 |
| 最近记录: |