为什么以下两种方法的this指向不同?

class A {

     printThis() {

         console.log(this)

     }

 };

 var a = new A().printThis;

 a();//undefined

  
  

 var B = {

     printThis() {

         console.log(this);

     },

 };

 var b = B.printThis;

 b();//window

我的理解是a()等价于window.a(),此时window为调用者,this指向window。但是实际指向了undefined,而b方法却能正常指向window,这是为什么呢?

阅读 2.3k
4 个回答

你在最前面加一个 "use strict" 试试(整段代码一起运行,不要分开运行)。

class 中的代码是在严格模式下执行的

补个参考链接:this -JavaScript | MDN

和类表达式一样,类声明体在严格模式下运行。构造函数是可选的。

——MDN

class A {
     printThis() {
         console.log(this)
     }
}
let a = new A();
a.printThis();

1.
b() = window.b()
————————————————————————
2.
类中函数里的 this 就根据是否是,非严格模式而指向全局环境或者 undefined (严格模式)【重点注意: ES6 的 class 内部默认就是严格模式】所以尽管在全局环境里执行a(),这里的 this 就是 undefined

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