Javascript this points to Window object

后端 未结 1 383
执笔经年
执笔经年 2020-12-06 07:19

I have the following code. I expected to see \"archive\" object on my firebug console, but I see Window object. Is it normal?

var archive = function(){}

arc         


        
相关标签:
1条回答
  • 2020-12-06 07:36

    oArchive.action.test2 gets you a reference to a function that callback then points to, but that function is then called using callback(), which means it is not called as a method and hence this is the global object. The key point is that this is not bound to a function: it's determined by how the function is called.

    In this case you could explicitly make this point to the action object (but not the archive object) by using the callback function's call or apply method:

    test: function(callback) {
        callback.call(this);
    },
    

    To get it this to be the archive object instead, you'll need to pass the archive object in:

    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);
    
    0 讨论(0)
提交回复
热议问题