打字稿成员函数最佳实践

时间:2016-06-12 11:11:31

标签: typescript

在阅读typescript和胖箭头操作符中的this关键字时,我遇到了一个例子,让我想知道在类中声明成员方法的最佳方法是什么?

基本上,这是否有区别:

class MyClass {
    private status = "blah";

    public run = () => { // <-- note syntax here
        alert(this.status);
    }
}

而且:

class MyClass {
    private status = "blah";

    public run() {
        alert(this.status);
    }
}

1 个答案:

答案 0 :(得分:2)

如果宣布正常功能:

public run() { /*...*/ }

它将在原型上声明:

MyClass.prototype.run = function () { /*...*/ };

但是,如果您声明了胖箭头功能:

public run2 = () => { /*...*/ }

它将在你的类的每个实例上声明,并且将绑定到这个类。

function MyClass() {
    this.run2 = function () { /*...*/ };
}

现在考虑一下:

class MyClass {
    private status = "blah";

    public run() {
        alert(this.status);
    }
    public run2 = () => {
        alert(this.status);
    }
}
var obj = new MyClass();
obj.run(); // alerts 'blah'
obj.run2(); // alerts 'blah'
var p = { run: obj.run, run2: obj.run2 };
p.run(); // alerts 'undefined'
p.run2(); // alerts 'blah'