2011-01-06 60 views
32

我試圖做這樣的事情:我可以在JavaScript中的對象聲明期間引用其他屬性嗎?

var obj = { 
    a: 5, 
    b: this.a + 1 
} 

(而不是5還有就是我不想執行返回數的兩倍的函數)

我可以把它改寫分配obj.b以後從obj.a,但是我可以在申報過程中馬上做嗎?

+2

你嘗試它的其餘部分?!? – ken 2011-01-06 18:50:09

+0

@ken`this.a` is undefined – serg 2011-01-06 18:51:03

回答

27

在JavaScript中的this不工作,就像你認爲它那樣工作。本例中的this是指全局對象。

只有3例,其中值this被設置:

的功能的情況下

foo(); 

這裏this將參照全球對象。

的方法案例

test.foo(); 

在這個例子中this將參考test

的構造案例

new foo(); 

這年代由new關鍵字作爲一個構造函數之前函數調用。功能this內部將參考新創建的 Object

其他地方,this引用全局對象。

4

這將返回正確的值:

function() { 
    var aVar = 5; 
    var bVar = aVar + 1; 

return { 
    a : aVar, 
    b : bVar; 
} 
}(); 
2

沒有,在你的例子中,this值不參照對象文本。

在創建對象之後,您需要爲b賦值,以便將其基於obj中的另一個屬性。

1

this將採用與定義之外相同的含義。

0
鉻調試

> var o = {a: 5, b: this.a+1} 
undefined 
> o.b 
NaN 
> o.a 
5 
6

有幾種方法可以做到這一點;這是我會用的:

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 
2

事實證明,除非第一個對象是函數,否則不能在另一個對象內引用對象。但你可以這樣做。

var obj = { 
     a: 5 
    } 

    obj.b = obj.a + 1; // create field b in runtime and assign it's value 

如果CONSOLE.LOG(OBJ),你將有

obj = { 
     a: 5, 
     b: 6 
    } 

這樣你保留該對象的文字結構的代碼

相關問題