H5W3
当前位置:H5W3 > 其他技术问题 > 正文

为什么以下两种方法的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,这是为什么呢?

回答

你在最前面加一个 "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

未经允许不得转载:H5W3 » 为什么以下两种方法的this指向不同?

赞 (0)

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址