Javascript 在声明中设置两个相等的属性
我想在一个对象中设置两个彼此相等的属性。下面是一个例子:Javascript 在声明中设置两个相等的属性,javascript,jquery,object,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; 在声明中有什么方法可以做到这一点吗?您可以先声明函数,然后将其
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;
在声明中有什么方法可以做到这一点吗?您可以先声明函数,然后将其与
a
&c
一起使用:
function f() { ... }
var obj = {
a: f,
b: alert,
c: f
};
您可以将该值放入单独的变量中:
var temp = function() { ... };
var obj = { // I want to do something like this
a: temp,
b: alert,
c: temp
};
但是,您无法做得更好。如果您想在对象初始值设定项内完成所有操作,则可以让一个属性从另一个属性调用函数,并使用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() { ... };
正如SLaks所提到的,如果函数具有属性(例如prototype或arguments.callee),这将不起作用。请参阅,如果函数具有属性(例如,
prototype
或arguments.callee
),这将不起作用。
var obj = {
a: function() { alert("hello")},
b: alert,
c: function(){return this.a()}
};
obj.c();