2011-05-12 10 views
8

Quiero establecer dos propiedades iguales entre sí en un objeto. He aquí un ejemplo:Estableciendo dos propiedades iguales en la declaración

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

Obviamente eso no funciona y tengo que hacer algo como esto:

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

¿Hay alguna manera de hacer eso en la declaración?

+0

Ver 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, y http://stackoverflow.com/questions/4616202/self-references-in-object-literal-declarations –

Respuesta

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

obj.c(); 

Como SLaks mencionaron, esto no funcionará si las funciones tienen propiedades (por ejemplo, prototipos o arguments.callee).

+1

Esto no funcionará si el las funciones tienen propiedades (p. ej., 'prototype' o' arguments.callee'). – SLaks

+0

Gracias, ese es un buen punto. Editado mi respuesta. –

1

Se puede declarar la función primera y utilizarlo con a & c:

function f() { ... } 

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

Se puede retener el valor en una variable independiente:

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

Sin embargo, no se puede hacer nada mejor que ese.

1

Si usted quiere hacer todo el interior del inicializador de objeto, entonces usted puede tener una llamada en la función de la propiedad de la otra y transmitir los argumentos que utilizan la propiedad Function.arguments:

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

Sin embargo, la mejor opción podría ser la creación de una variable que contiene la función anónima en primer lugar, a continuación, asignar su valor a ambas propiedades en su inicializador de objeto:

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

también puede hacer algo como esto, pero me gustaría ir con el enfoque de uno anterior:

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