我有一个功能,称之为meow()
,作为课程的一部分,称之为Cat
:
export class Cat(){
private meow(){
console.log(this);
}
现在,假设我有另一个类,称之为Kitten
,它将一个函数作为其构造函数的一部分:
export class Kitten {
var kittenMeow: { (): void; }; //note the typing
constructor(functionForMeow : { (): void; }){ //note the typing
this.kittenMeow = functionForMeow;
}
public meow(){
this.kittenMeow();
}
}
现在说我将以下内容添加到Cat
类:
export class Cat(){
constructor(){
this.giveBirth();
}
private meow(){
console.log(this);
}
giveBirth(){
var kitty = new Kitten(this.meow);
kitty.meow();
}
}
当我运行此代码时," Kitten"登录到控制台。我怎样才能做到这样#" Cat"登录到控制台?也就是说,如何保留this
的原始范围,以便this
引用Cat
而不是Kitten
答案 0 :(得分:1)
您可以使用.bind()
method来指定当前范围中this
的值。然后,当执行该函数时,this
将引用Cat
而不是Kitten
。
var kitty = new Kitten(this.meow.bind(this));
换句话说,由于this
在Cat
方法上下文中引用giveBirth
,因此在另一个范围内执行该函数时传递的值。
export class Cat {
giveBirth() {
var kitty = new Kitten(this.meow.bind(this));
kitty.meow();
}
}