Javascript这指向Window对象

Moo*_*oon 8 javascript this

我有以下代码.我希望在我的firebug控制台上看到"archive"对象,但是我看到了Window对象.这是正常的吗?

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);
Run Code Online (Sandbox Code Playgroud)

Tim*_*own 6

oArchive.action.test2获取对指向的函数的引用,callback然后使用该函数调用callback(),这意味着它不作为方法调用,因此this是全局对象.关键点在于它this没有绑定到函数:它取决于函数的调用方式.

在这种情况下,您可以this使用回调函数callapply方法显式指向操作对象(但不是归档对象):

test: function(callback) {
    callback.call(this);
},
Run Code Online (Sandbox Code Playgroud)

要使它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);
Run Code Online (Sandbox Code Playgroud)