oArchive.action.test2
возвращает ссылку на функцию, на которую затем указывает callback
, но эта функция затем вызывается с использованием callback()
, что означает, что она не вызывается как метод, и, следовательно, this
является глобальным объектом , Ключевым моментом является то, что this
не связан с функцией: он определяется тем, как вызывается функция.
В этом случае вы могли бы явно указать this
на указание на объект действия (но не на объект архива) с помощью метода call
или apply
функции обратного вызова:
test: function(callback) {
callback.call(this);
},
Чтобы вместо него this
быть объектом архива, вам нужно передать объект архива в:
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);