ES6中this指向它的调用者。
例如:
点击button的时候sum()方法里面this指向btn。此时如果再调用构造函数里面的x,y,不能直接用this.x和this.y,而是采取在类之外定义一个变量_that,在构造函数里面让_that等于构造函数里面的this,最后在sum函数里面通过_that变量来调用构造函数中的x和y。
var _that;
class Father{
constructor(x,y) {
this.x=x;
this.y=y;
_that=this;
this.btn = document.querySelector("button");
this.btn.onclick= this.sum;
console.log(this); //son
}
sum(){
// console.log(this.x + this.y);
//此时this不再指向constructor 结果为:NaN
//此时如果还要调用构造函数中的this,
// 设一个变量_that,让_that等于构造函数中的this,再调用_that.x _that.y
console.log(_that.x + _that.y);
console.log(this); //btn
}
}
//子类继承父类加法,同时扩展减法方法
class Son extends Father{
constructor(x,y) {
//利用 super 调用父类的构造方法
//super必须放到 this 前面 (必须先调用父类的构造方法,在使用子类构造方法)
super(x,y);
this.x = x;
this.y = y;
}
subtract(){
console.log(this.x - this.y);
console.log(this); //son
}
}
var son = new Son(20,10);