js中this指向的问题

以为是基于mod调用,this会指向mod。然而实际是指向全局对象。。。不太能理解,应该怎么分析

    var mod ={};

    mod.load = function(func){
        func();
    };

    mod.load(function(){
        console.log(this);
    })
阅读 1.7k
3 个回答

其实要判断this的指向就是判断this所在的函数属于谁(非严格模式下)

  1. 有对象的就指向对象

  2. 没有调用对象的就指向全局对象

  3. new构造的就值向新的对象

  4. 可通过applycallbind来改变this的指向

window.name = 'testWindow';

var mod = { };
mod.name = 'testObjSelf';

mod.load = function(func){
    func();
    console.log(this.name);    //指向mod,对象本身的一个方法
};

mod.load(function(){
    console.log(this.name);    
//指向window,该函数虽然定义在load函数体内,但并没有绑定在任何对象上,所以当调用时,它的this指针指了全局对象
})    

推荐博客地址
书籍推荐《javascript设计模式与开发实践》、《JavaScript语言精髓与编程实践》

  • Javascript是静态词法作用域,函数作用域是由声明时决定的,而不是运行时决定的

  • 函数的四种调用方式,对应函数的四种this指向(ES5非严格模式)

  1. 函数直接调用——this指向window

  2. 作为对象属性——this指向对象本身

  3. 作为构造函数 new调用——this指向将要被实例化出来的对象

  4. 使用call,apply借用——this指向第一个参数

你的代码中func()隶属于第一种情况,自然指向全局对象

有对象指向对象
没有对象指向window

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题