由于某些原因,选项1通常更可取。
class Test extends React.Component{ constructor(props) { super(props); this.doSomeThing = this.doSomeThing.bind(this); } doSomething() {}}原型方法更易于扩展。子类可以覆盖或扩展
doSomething与
doSomething() { super.doSomething(); ...}当实例属性
this.doSomeThing = () => {};或ES.next class字段
doSomeThing = () => {}代替使用,调用
super.doSomething()是不可能的,因为该方法未在原型上定义。覆盖它会导致在
this.doSomeThing父和子构造函数中两次分配属性。
混合方法也可以使用原型方法:
class Foo extends Bar {...}Foo.prototype.doSomething = Test.prototype.doSomething;原型方法更具可测试性。在类实例化之前,可以对它们进行间谍,添加或模拟:
spyOn(Foo.prototype, 'doSomething').and.callThrough();
在某些情况下,这可以避免比赛条件。



