У меня есть следующий код. Я ожидал видеть объект "архива" на своей консоли поджигателя, но я вижу Объект окна. Действительно ли это нормально?
var archive = function(){}
archive.prototype.action = {
test: function(callback){
callback();
},
test2: function(){
console.log(this);
}
}
var oArchive = new archive();
oArchive.action.test(oArchive.action.test2);
oArchive.action.test2
дает вам ссылку на функцию, на которую затем указывает обратный вызов
, но тогда эта функция вызывается с помощью 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);