Podrías hacerlo así
var a, b
var foo = {
a: a = 5,
b: b = 6,
c: a + b
}
Ese método me ha resultado útil cuando tuve que referirme al objeto en el que se declaró originalmente una función. El siguiente es un ejemplo mínimo de cómo lo usé:
function createMyObject() {
var count = 0, self
return {
a: self = {
log: function() {
console.log(count++)
return self
}
}
}
}
Al definir self como el objeto que contiene la función de impresión, permite que la función haga referencia a ese objeto. Esto significa que no tendrá que 'vincular' la función de impresión a un objeto si necesita pasarla a otro lugar.
Si, en cambio, lo usa this
como se ilustra a continuación
function createMyObject() {
var count = 0
return {
a: {
log: function() {
console.log(count++)
return this
}
}
}
}
Luego, el siguiente código registrará 0, 1, 2 y luego dará un error
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!
Al utilizar el método self, garantiza que print siempre devolverá el mismo objeto, independientemente del contexto en el que se ejecute la función. El código anterior se ejecutará bien y registrará 0, 1, 2 y 3 cuando use la versión propia de createMyObject()
.