类中定义的方法的this的指向问题
<script type="text/javascript">
class Person {
constructor(name, age) {
this.name = name
this.age = age
}
study(){
console.log(this)
}
}
const p1= new Person('tom',18)
p1.study() //打印Person
const x = p1.study
x() //打印undefined
</script>
类里面的方法都是给实例对象使用的,
只要是用实例对象调用的方法,this的指向就是实例对象。
但是cons x是一个全局变量,const x = p1.study是把实例对象调用的类里面的study“属性”赋值给了X,
X() 调用study方法,x的study方法是一个全局的方法,那么this的指向就是window,
又因为类里面的方法会自定开启严格模式,所以打印的是undefined
总结 带括号的 p1.study() 就是使用这个方法。带括号赋值 const x = p1.study()就是把方法执行的结果给别的变量,不带括号赋值 const x = p1.study就是把这个方法给别的变量用。