在JavaScript中引用其他对象属性的对象属性

时间:2013-12-11 17:25:36

标签: javascript

我做:

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?

3 个答案:

答案 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/

Read More

答案 1 :(得分:1)

您可能希望得到属性值ab的总和。你需要一个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可能未定义ab,因此您获得NaN

以下是一个很好的例子:http://www.quirksmode.org/js/this.html