英文原版: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
本节完