2016-02-25 264 views
1

我有這樣一個簡單的代碼對象變量初始化

var q = { 
    p1: 'kv3', 
    p2: 'http://google.com/' + this.p1 
}; 

console.log(q.p2); 

,我希望輸出p2 + p1,但由於某些原因,p1似乎當我console.log是未定義的。 p2之前是不是p1初始化?

這將是正確的代碼是什麼?

+0

'this'只有當你調用一個函數來設置。 – Barmar

回答

3

記住this是不會突然指q對象申報的內部:

var p1 = 'kv3'; 

var q = { 
    p1: p1, 
    p2: 'http://google.com/' + p1 
}; 
2

對象q全部初始化爲一體,因此它內部的所有內容都無法訪問,直到整個事情完成初始化。試試這個:

var q = { 
    p1: 'kv3' 
}; 
q.p2 = 'http://google.com/' + q.p1 

console.log(q.p2); 
2

this是一個額外的參數功能(除了箭頭的)接受被調用時。

因此,該this不引用該對象(反正它還沒有被創建)。

但是你可以實例,而不是一個匿名函數:

var q = new function() { 
    this.p1 = 'kv3'; 
    this.p2 = 'http://google.com/' + this.p1; 
};