Das könnte man so machen
var a, b
var foo = {
a: a = 5,
b: b = 6,
c: a + b
}
Diese Methode hat sich für mich als nützlich erwiesen, wenn ich auf das Objekt verweisen musste, für das eine Funktion ursprünglich deklariert wurde. Nachfolgend ein minimales Beispiel, wie ich sie verwendet habe:
function createMyObject() {
var count = 0, self
return {
a: self = {
log: function() {
console.log(count++)
return self
}
}
}
}
Indem Sie self als das Objekt definieren, das die Druckfunktion enthält, erlauben Sie der Funktion, sich auf dieses Objekt zu beziehen. Das bedeutet, dass Sie die Druckfunktion nicht an ein Objekt "binden" müssen, wenn Sie sie an eine andere Stelle übergeben müssen.
Wenn Sie stattdessen this
wie unten dargestellt
function createMyObject() {
var count = 0
return {
a: {
log: function() {
console.log(count++)
return this
}
}
}
}
Dann wird der folgende Code 0, 1, 2 protokollieren und dann einen Fehler ausgeben
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!
Durch die Verwendung der self-Methode garantieren Sie, dass print immer dasselbe Objekt zurückgibt, unabhängig vom Kontext, in dem die Funktion ausgeführt wird. Der obige Code läuft einwandfrei und protokolliert 0, 1, 2 und 3, wenn Sie die self-Version von createMyObject()
.