我試圖做這樣的事情:我可以在JavaScript中的對象聲明期間引用其他屬性嗎?
var obj = {
a: 5,
b: this.a + 1
}
(而不是5還有就是我不想執行返回數的兩倍的函數)
我可以把它改寫分配obj.b
以後從obj.a
,但是我可以在申報過程中馬上做嗎?
我試圖做這樣的事情:我可以在JavaScript中的對象聲明期間引用其他屬性嗎?
var obj = {
a: 5,
b: this.a + 1
}
(而不是5還有就是我不想執行返回數的兩倍的函數)
我可以把它改寫分配obj.b
以後從obj.a
,但是我可以在申報過程中馬上做嗎?
在JavaScript中的this
不工作,就像你認爲它那樣工作。本例中的this
是指全局對象。
只有3例,其中值this
被設置:
的功能的情況下
foo();
這裏this
將參照全球對象。
的方法案例
test.foo();
在這個例子中this
將參考test
。
的構造案例
new foo();
這年代由new
關鍵字作爲一個構造函數之前函數調用。功能this
內部將參考新創建的 Object
。
其他地方,this
引用全局對象。
這將返回正確的值:
function() {
var aVar = 5;
var bVar = aVar + 1;
return {
a : aVar,
b : bVar;
}
}();
沒有,在你的例子中,this
值不參照對象文本。
在創建對象之後,您需要爲b
賦值,以便將其基於obj
中的另一個屬性。
第this
將採用與定義之外相同的含義。
> var o = {a: 5, b: this.a+1}
undefined
> o.b
NaN
> o.a
5
有幾種方法可以做到這一點;這是我會用的:
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
事實證明,除非第一個對象是函數,否則不能在另一個對象內引用對象。但你可以這樣做。
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
}
這樣你保留該對象的文字結構的代碼
你嘗試它的其餘部分?!? – ken 2011-01-06 18:50:09
@ken`this.a` is undefined – serg 2011-01-06 18:51:03