class中的this

81 阅读1分钟
  func1() {
    console.log(111);
  }
  func2() {
  this.func1();
  }
}

const classA = new ClassA();
const func3 = classA.func2;
try {
  classA.func2();
  func3();
} catch(error) {
  console.log(error);
}

classA.func2()有输出

func3()无输出

直接执行func3()的时候,相当于是全局调用。 全局调用时的this上并没有func1这个函数,就会报错。 classA.func2()调用时,是classA实例在调用func2,于是此时的this就是classA这个实例,这里实例内部是有func1的,因此可以打印成功。 (函数内部this的指向,在于是谁调用的这个函数)

修改方法: 1.

  func1() {
    console.log(111);
  }
  func2() {
    this.func1();
  }
}

const classA = new ClassA();
const func3 = classA.func2.bind(classA);
try {
  classA.func2();
  func3();
} catch(error) {
  console.log(error);
}

  func1() {
    console.log(111);
  }
  func2 = () => {
  this.func1()
  }
}

const classA = new ClassA();
const func3 = classA.func2;
try {
  classA.func2();
  func3();
} catch(error) {
  console.log(error);
}

使用箭头函数,可以传递this。

func3 = classA.func2 (如果func2是一个普通函数,那这里就只是函数的赋值操作,如果func2是一个箭头函数,那就不只是赋值,还包括了this的传递) 相当于: func2为箭头函数,func3 = classA.func2这行代码就等价于func3 = classA.func2.bind(classA)