oArchive.action.test2
si ottiene un riferimento a una funzione che callback
poi punti, ma tale funzione è poi chiamata utilizzando callback()
, il che significa che non viene richiamata come metodo e quindi this
è l'oggetto globale. Il punto chiave è che this
non è associato a una funzione: è determinato dal modo in cui viene chiamata la funzione.
In questo caso si potrebbe esplicitamente fare this
punto l'oggetto dell'azione (ma non l'oggetto di archivio) utilizzando call
o apply
il metodo della funzione di callback:
test: function(callback) {
callback.call(this);
},
per farlo this
di essere l'oggetto di archivio invece, devi passare l'oggetto archivio in:
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);
fonte
2010-04-27 08:21:23