我做:
outerobject={
a: 1,
b: 2,
c: this.a + this.b,
};
console.log(outerobject.a);
console.log(outerobject.b);
console.log(outerobject.c);
我期待:
1
2
3
我明白了:
1
2
NaN
为什么我会得到NaN?
答案 0 :(得分:3)
在对象this
内分配了对window
或全局对象的引用。您需要使用一个函数,该函数将this
引用该对象的引用。
var outerobject={ a: 1, b: 2, c: function(){return this.a + this.b}};
var outerobject2={ a: 1, b: 2, c: console.log(this)}; //logs window/global object
console.log(outerobject.c());//outputs 3
或使用函数构造函数:
function MyObject(){
this.a = 1;
this.b = 2;
this.c = this.a + this.b;
console.log(this);
}
var myObject = new MyObject();
关键是function
确定this
的范围。当函数作为对象的方法被调用时,其this
被设置为调用该方法的对象。
JS小提琴: http://jsfiddle.net/aRFLn/
答案 1 :(得分:1)
您可能希望得到属性值a
和b
的总和。你需要一个getter:
var outerobject = {
a: 1, // inside a property value `this` is `window`
b: 2,
get c() {
return this.a + this.b; // inside a getter function 'this' is `outerobject`
}
};
然后您可以使用outerobject.c
。每次调用它时也会重新评估:
outerobject.c; // 3
outerobject.a++;
outeobject.c; // 4
答案 2 :(得分:0)
在你的情况下,'this'可以是任意数量的东西,具体取决于它的调用位置。在您的情况下,它很可能是window
对象。由于window
可能未定义a
和b
,因此您获得NaN
。
以下是一个很好的例子:http://www.quirksmode.org/js/this.html