如何保持这个'的原始范围?传递函数时?

时间:2017-01-31 03:10:57

标签: javascript typescript this

我有一个功能,称之为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

1 个答案:

答案 0 :(得分:1)

您可以使用.bind() method来指定当前范围中this的值。然后,当执行该函数时,this将引用Cat而不是Kitten

var kitty = new Kitten(this.meow.bind(this));

换句话说,由于thisCat方法上下文中引用giveBirth,因此在另一个范围内执行该函数时传递的值。

export class Cat {
  giveBirth() {
    var kitty = new Kitten(this.meow.bind(this));
    kitty.meow();
  }
}