我想在一个对象中设置两个彼此相等的属性。这是一个例子:
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 :(得分:1)
您可以先声明该功能,然后将其与a
& c
:
function f() { ... }
var obj = {
a: f,
b: alert,
c: f
};
答案 1 :(得分:1)
您可以将值放入单独的变量中:
var temp = function() { ... };
var obj = { // I want to do something like this
a: temp,
b: alert,
c: temp
};
然而,你不能做得更好。
答案 2 :(得分: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() { ... };
答案 3 :(得分:1)
var obj = {
a: function() { alert("hello")},
b: alert,
c: function(){return this.a()}
};
obj.c();
正如SLaks所提到的,如果函数具有属性(例如prototype或arguments.callee),这将不起作用。