打字稿中的绑定方法

时间:2018-11-20 15:06:39

标签: python typescript

在Python中,有一种通用模式,其工作方式如下

class MyClass:
    def __init__(self):
        self._x = 0

    def increment_and_print(self, i):
        self._x = self._x + i
        print(self._x)

instance = MyClass()
bound_method = instance.increment_and_print

在这里,bound_method等效于功能lambda i: instance.increment_and_print(i),即它包含一个像闭包一样的实例对象。

现在我想知道打字稿是否也有类似的速记符号,即

class MyClass {
  private _x : number;
  constructor() { this._x = 0; }
  incrementAndPrint(i: number) {
    self._x += i;
    console.log(self._x)
  }
}

您是否只使用lambda函数来生成闭包(如Python中的“绑定方法”速记)?还是有另一种方法?

1 个答案:

答案 0 :(得分:1)

是的,您可以使用bind做到这一点-函数是JavaScript中的第一类,因此您可以轻松地传递它们:

class MyClass {
    private _x: number = 0;

    incrementAndPrint(i: number) {
        this._x += i;
        console.log(this._x)
    }
}

const myClass = new MyClass();

const incrementAndPrint = myClass.incrementAndPrint.bind(myClass);

incrementAndPrint(2);
incrementAndPrint(3);

您也可以使用箭头功能:

const incrementAndPrint = (num: number) => myClass.incrementAndPrint(num);