【问题标题】:Javascript this points to Window objectJavascript this 指向 Window 对象
【发布时间】:2010-04-27 16:27:01
【问题描述】:

我有以下代码。我希望在我的萤火虫控制台上看到“存档”对象,但我看到了 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);

【问题讨论】:

    标签: javascript this


    【解决方案1】:

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

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

    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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-08
      • 1970-01-01
      • 2011-05-17
      • 1970-01-01
      • 1970-01-01
      • 2020-04-14
      • 2021-01-27
      • 1970-01-01
      相关资源
      最近更新 更多