我想知道是否可以更改Ember.Object.extend
现有对象实例的“类”(派生自),例如计算属性 Ember 的_super
/继承/混合、绑定、观察者以及 Ember 对象模型的所有其他好处仍然有效.
我尝试简单地将 设置__proto__
为不同的类prototype
,但这对于计算属性失败(它将查找旧类的计算属性):
Triangle = Ember.Object.extend
sides: 3
greeting: (->
"I'm a triangle and I have #{sides} sides"
).property('sides')
Square = Ember.Object.extend
sides: 4
greeting: (->
"I'm a square and I have #{sides} sides"
).property('sides')
t = Triangle.create()
t.get('greeting') # I'm a triangle and I have 3 sides
t.__proto__ = Square.prototype
t.get('greeting') # I'm a triangle and I have 3 sies
在查看源代码时,似乎Ember.get
通过对象解析了计算属性meta
(来源:https ://github.com/emberjs/ember.js/blob/v1.1.2/packages/ember-metal/lib/property_get.js# L66 )。通过查看元对象,我可以看到所有属性的列表t[Ember.META_KEY].desc
,但我不清楚如何处理元对象。
如何修改元对象以允许计算属性和绑定与新重新分配的原型一起使用?