7

有时您App.Model.reopenClass()在模型上使用(链接)和 Ember 指南谈论App.Router.reopen()链接)。来自 Ember 指南:

重新打开用于添加在类的所有实例之间共享的实例方法和属性。它不会像 vanilla JavaScript 那样向类的特定实例添加方法和属性(不使用原型)。

但是当您需要创建类方法或向类本身添加属性时,您可以使用reopenClass。

这在什么时候是必要的/有利的?不能直接添加所有内容吗?

4

2 回答 2

3

rebootClass 类似于向原型添加方法,而不是在类的每个实例上添加方法。您可以将它们视为静态变量/方法,而不是实例变量/方法。

这是一个主要的性能提升,并且可能对您正在解决的问题更有意义。

于 2013-11-14T22:05:20.217 回答
1

重新打开类的一个示例是,当您想要将属性添加到现有的默认生成类时。例如:ember 应用程序的许多实例不扩展路由器类。他们只是使用默认路由器类。但是,如果您想将一些属性添加到您想在其他地方使用的路由器类怎么办。重新打开在那里非常有用。这是我能想到的一个用例。

此外,在路由器的情况下,扩展类是困难的,因为 ember 中的大多数代码只使用路由器类。即使你扩展,一些回调/闭包仍然会引用旧的路由器类。

于 2013-11-14T22:03:15.580 回答