关于动态this和静态this

  • 代码

var obj={
    a:1,
    obj2:{
        b:2,
        obj3:{
            c:3,
            fn3:()=>{
                console.log(this);
            },
            fn3_:function(){
                console.log(this);
            }
        }
    }
}
  • 执行结果

    • window.obj.obj2.obj3.fn3();
      image.png
    • window.obj.obj2.obj3.fn3_();
      image.png
  • 疑惑

    • 第一个既然是静态this,为什么打印结果不是{b:2,obj3:{...}}
  • 第二个代码

var Obj =function(){
    this.a=1;
    this.obj2={
        b:2,
        obj3:{
            c:3,
            fn3:()=>{
                console.log(this);
            },
            fn3_:function(){
                console.log(this);
            }
        }
    }
}
  • 执行结果

    • var obj = new Obj();
    • window.obj.obj2.obj3.fn3();
      image.png
    • window.obj.obj2.obj3.fn3_();
      image.png
  • 疑惑

    • 为什么代码1代码2执行结果迥异
阅读 2.2k
2 个回答
  • 传统函数的 this 是动态的。它取决于 this 怎样被调用。
  • 箭头函数的 this 是静态的。它取决于 this 在哪个作用域中定义。

很多人将的都不够标准,你看看下面的文档,讲的很详细

另外:没有 静态this 这种说法

Arrow_functions

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