JavaScript это указывает на Объект окна

У меня есть следующий код. Я ожидал видеть объект "архива" на своей консоли поджигателя, но я вижу Объект окна. Действительно ли это нормально?

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);
8
задан Moon 27 April 2010 в 08:11
поделиться

1 ответ

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);
6
ответ дан 5 December 2019 в 22:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: