2011-05-12 50 views
8

我想在一個對象中設置兩個相等的屬性。這裏有一個例子:在聲明中設置兩個相等的屬性

var obj = { // I want to do something like this 
    a: function() { ... }, 
    b: alert, 
    c: a 
}; 

顯然不行,我必須做這樣的事情:

var obj = { 
    a: function() { ... }, 
    b: alert, 
}; 
obj.c = obj.a; 

有沒有辦法做到這一點的聲明?

+0

請參閱http://stackoverflow.com/questions/2787245/how-can-a-javascript-object-refer-to-values-in-itself,http://stackoverflow.com/questions/4618541/can- i-reference-other-properties-during-object-declaration-in-javascript,以及http://stackoverflow.com/questions/4616202/self-references-in-object-literal-declarations – 2011-05-12 00:43:07

回答

1
var obj = { 
    a: function() { alert("hello")}, 
    b: alert, 
    c: function(){return this.a()} 
}; 

obj.c(); 

如SLaks提到的,如果函數具有特性(例如,原型或arguments.callee的),這將不起作用。

+1

這不會工作,如果函數具有屬性(例如'prototype'或'arguments.callee')。 – SLaks 2011-05-12 00:50:17

+0

謝謝,這是一個很好的觀點。編輯我的答案。 – 2011-05-12 00:54:41

1

你可以先聲明函數與a & c使用它:

function f() { ... } 

var obj = { 
    a: f, 
    b: alert, 
    c: f 
}; 
1

你可以把值插入到一個單獨的變量:

var temp = function() { ... }; 
var obj = { // I want to do something like this 
    a: temp, 
    b: alert, 
    c: temp 
}; 

但是,你不能做任何優於那。

1

如果你想要做的對象初始化裏面的一切,那麼你可以有一個屬性調用與其他功能和繼電器使用Function.arguments財產的任何參數:

var obj = { 
    a: function() { ... }, 
    b: alert, 
    c: function() { return this.a(arguments); } 
}; 

不過,你最好的選擇可能是第一次創建一個包含匿名函數的變量,然後分配給它的價值,這兩個屬性在你的對象初始化:

var fn = function() { ... }; 
var obj = { 
    a: fn, 
    b: alert, 
    c: fn 
}; 

你也可以做這樣的事情,但我上面的方法一氣呵成:

var obj = { b: alert }; 
obj.a = obj.c = function() { ... }; 
相關問題