2011-05-12 9 views
8

Desidero impostare due proprietà uguali l'una all'altra in un oggetto. Ecco un esempio:Impostazione di due proprietà uguali nella dichiarazione

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

Ovviamente questo non funziona e devo fare qualcosa di simile:

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

Esiste un modo per farlo nella dichiarazione?

+0

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

risposta

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

obj.c(); 

Come SLaks menzionati, questo non funzionerà se le funzioni hanno proprietà (ad esempio, prototipo o arguments.callee).

+1

Questo non funzionerà se il le funzioni hanno proprietà (ad esempio, 'prototype' o' arguments.callee'). – SLaks

+0

Grazie, è un buon punto. Modificato la mia risposta. –

1

È possibile dichiarare la funzione prima e utilizzarlo con a & c:

function f() { ... } 

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

si può mettere il valore in una variabile indipendente:

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

Tuttavia, non si può fare di meglio quella.

1

Se si vuole fare tutto all'interno della inizializzatore di oggetto, allora si può avere una chiamata alla funzione di proprietà dall'altro e trasmettere tutti gli argomenti che utilizzano la proprietà Function.arguments:

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

Tuttavia, la cosa migliore potrebbe essere quella di creare una variabile che contiene la funzione anonima prima, quindi assegnare il suo valore a entrambe le proprietà nella vostra inizializzazione degli oggetti:

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

Si può anche fare qualcosa di simile, ma mi piacerebbe andare con l'approccio quello sopra:

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