Możesz to zrobić w ten sposób
var a, b
var foo = {
a: a = 5,
b: b = 6,
c: a + b
}
Ta metoda okazała się przydatna, gdy musiałem odwoływać się do obiektu, na którym pierwotnie zadeklarowano funkcję. Poniżej znajduje się minimalny przykład tego, jak go użyłem:
function createMyObject() {
var count = 0, self
return {
a: self = {
log: function() {
console.log(count++)
return self
}
}
}
}
Definiując self jako obiekt zawierający funkcję drukowania, pozwalasz funkcji odwoływać się do tego obiektu. Oznacza to, że nie musisz „wiązać” funkcji drukowania z obiektem, jeśli musisz przekazać go gdzie indziej.
Jeśli wolisz, użyj tego, this
jak pokazano poniżej
function createMyObject() {
var count = 0
return {
a: {
log: function() {
console.log(count++)
return this
}
}
}
}
Następnie poniższy kod zarejestruje 0, 1, 2, a następnie wyświetli błąd
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!
Korzystając z metody self, gwarantujesz, że druk zawsze zwróci ten sam obiekt, niezależnie od kontekstu, w którym funkcja jest uruchomiona. Powyższy kod będzie działał dobrze i logował się 0, 1, 2 i 3, gdy używasz własnej wersji createMyObject()
.