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

Object properties referencing other object properties in JavaScript

本文关键字:对象 属性 其他 JavaScript 引用      更新时间:2023-09-26

我做:

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?

在对象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 Fiddle:http://jsfiddle.net/aRFLn/

阅读更多

您可能想要获得属性值ab的总和。你需要一个吸气剂:

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

在您的情况下,"this"可以是任意数量的东西,具体取决于调用它的位置。在您的情况下,它很可能是window对象。由于window可能没有定义ab,所以您得到了NaN

下面是一个很好的例子来说明它是如何工作的:http://www.quirksmode.org/js/this.html