重新打开类和实例 编辑页面
英文原文:http://emberjs.com/guides/object-model/reopening-classes-and-instances/
Ember.js的类不需要一次性完成所有的定义。可以通过reopen
方法重新打开一个类来定义新的属性。
1 2 3 4 5 |
Person.reopen({ isPerson: true }); Person.create().get('isPerson') // true |
当使用reopen
时,还可以重写已有的方法。在重写的方法中可以通过this._super
来调用被重写的方法。
1 2 3 4 5 6 |
Person.reopen({ // 在末尾加 ! 来重载 `say` say: function(thing) { this._super(thing + "!"); } }); |
reopen
用来添加被所有类的实例共享的实例方法和属性。它不能像Vanilla Javascript那样,用来为某一特定的实例来添加方法和属性(不使用prototype)。
但是如果需要为类添加方法和属性,则可以使用reopenClass
方法。
1 2 3 4 5 6 7 |
Person.reopenClass({ createMan: function() { return Person.create({isMan: true}) } }); Person.createMan().get('isMan') // true |