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)