Potresti farlo in questo modo
var a, b
var foo = {
a: a = 5,
b: b = 6,
c: a + b
}
Questo metodo mi è stato utile quando ho dovuto fare riferimento all'oggetto su cui era stata inizialmente dichiarata una funzione. Di seguito è riportato un esempio minimo di come l'ho usato:
function createMyObject() {
var count = 0, self
return {
a: self = {
log: function() {
console.log(count++)
return self
}
}
}
}
Definendo self come l'oggetto che contiene la funzione di stampa, si consente alla funzione di fare riferimento a quell'oggetto. Ciò significa che non sarà necessario "associare" la funzione di stampa a un oggetto se è necessario passarlo altrove.
Se invece lo utilizzassi this
come illustrato di seguito
function createMyObject() {
var count = 0
return {
a: {
log: function() {
console.log(count++)
return this
}
}
}
}
Quindi il seguente codice registrerà 0, 1, 2 e quindi darà un errore
var o = createMyObject()
var log = o.a.log
o.a.log().log() // this refers to the o.a object so the chaining works
log().log() // this refers to the window object so the chaining fails!
Utilizzando il metodo self si garantisce che print restituirà sempre lo stesso oggetto indipendentemente dal contesto in cui viene eseguita la funzione. Il codice sopra funzionerà bene e registrerà 0, 1, 2 e 3 quando si utilizza la versione di createMyObject()
.