oArchive.action.test2
bekommt man einen Verweis auf eine Funktion, die callback
zeigt dann auf, aber diese Funktion aufgerufen wird dann callback()
verwenden, was bedeutet, dass es nicht als eine Methode aufgerufen wird, und daher ist this
das globale Objekt. Der entscheidende Punkt ist, dass this
nicht an eine Funktion gebunden ist: Sie wird durch den Aufruf der Funktion bestimmt.
In diesem Fall explizit this
Punkt zum Aktionsobjekt machen könnte (aber das Archivobjekt nicht) durch die Callback-Funktion des call
oder apply
Methode:
test: function(callback) {
callback.call(this);
},
Um es this
das Archiv-Objekt zu sein Stattdessen müssen Sie das Archivierungsobjekt übergeben:
var archive = function(){}
archive.prototype.action = {
test: function(callback, archive){
callback.call(archive);
},
test2: function(){
console.log(this);
}
}
var oArchive = new archive();
oArchive.action.test(oArchive.action.test2, oArchive);