oArchive.action.test2
получает вам ссылку на функцию, которая callback
затем указывает, но эта функция затем вызывается с помощью callback()
, что означает, что не вызывается как метод и, следовательно, 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);