英文原版:https://guides.emberjs.com/v2.13.0/object-model/reopening-classes-and-instances/
你不必非要一次把类定义完整。你可以通过reopen()方法再次开启类并且定义新的属性:
Person.reopen({ isPerson: true }); Person.create().get('isPerson'); // true当你使用reopen()时,这时候你可以覆写已经存在方法,并且可以调用this._super():
Person.reopen({ // override `say` to add an ! at the end say(thing) { this._super(thing + '!'); } });reopen()用来添加实例方法和属性,并且可以在所有的实例中使用。【注】 在vanilla JavaScript 中这个无效。
当你打算添加一个对类有效的静态方法或属性的时候,你应该使用reopenClass():
// add static property to class Person.reopenClass({ isPerson: false }); // override property of existing and future Person instances Person.reopen({ isPerson: true }); Person.isPerson; // false - because it is static property created by `reopenClass` Person.create().get('isPerson'); // true本节完