在声明中设置两个相等的属性

时间:2011-05-12 00:34:53

标签: javascript jquery object

我想在一个对象中设置两个彼此相等的属性。这是一个例子:

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;

在声明中有没有办法做到这一点?

4 个答案:

答案 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),这将不起作用。