Javascript这指向Window对象

时间:2010-04-27 08:11:12

标签: 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);

1 个答案:

答案 0 :(得分:6)

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

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

apply

要使test: function(callback) { callback.call(this); }, 成为归档对象,您需要在以下位置传递归档对象:

this