Option 1 is generally more preferable for certain reasons.
class Test extends React.Component{
constructor(props) {
super(props);
this.doSomeThing = this.doSomeThing.bind(this);
}
doSomething() {}
}
Prototype method is cleaner to extend. Child class can override or extend doSomething
with
doSomething() {
super.doSomething();
...
}
When instance property
this.doSomeThing = () => {};
or ES.next class field
doSomeThing = () => {}
are used instead, calling super.doSomething()
is not possible, because the method wasn't defined on the prototype. Overriding it will result in assigning this.doSomeThing
property twice, in parent and child constructors.
Prototype methods are also reachable for mixin techniques:
class Foo extends Bar {...}
Foo.prototype.doSomething = Test.prototype.doSomething;
Prototype methods are more testable. They can be spied, stubbed or mocked prior to class instantiation:
spyOn(Foo.prototype, 'doSomething').and.callThrough();
This allows to avoid race conditions in some cases.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…