有时您App.Model.reopenClass()
在模型上使用(链接)和 Ember 指南谈论App.Router.reopen()
(链接)。来自 Ember 指南:
重新打开用于添加在类的所有实例之间共享的实例方法和属性。它不会像 vanilla JavaScript 那样向类的特定实例添加方法和属性(不使用原型)。
但是当您需要创建类方法或向类本身添加属性时,您可以使用reopenClass。
这在什么时候是必要的/有利的?不能直接添加所有内容吗?
rebootClass 类似于向原型添加方法,而不是在类的每个实例上添加方法。您可以将它们视为静态变量/方法,而不是实例变量/方法。
这是一个主要的性能提升,并且可能对您正在解决的问题更有意义。
重新打开类的一个示例是,当您想要将属性添加到现有的默认生成类时。例如:ember 应用程序的许多实例不扩展路由器类。他们只是使用默认路由器类。但是,如果您想将一些属性添加到您想在其他地方使用的路由器类怎么办。重新打开在那里非常有用。这是我能想到的一个用例。
此外,在路由器的情况下,扩展类是困难的,因为 ember 中的大多数代码只使用路由器类。即使你扩展,一些回调/闭包仍然会引用旧的路由器类。