使用原型(prototype)创建的 JavaScript 对象与其原型(prototype)保持“实时”连接,因此更改原型(prototype)也会影响从它创建的对象。
如果新创建的对象只是复制原型(prototype)中的所有内容然后忘记它,那么语言的语义会简单得多。当然,实际的底层实现可能更智能。
实时/动态连接的这个特性是否真的用在一些著名的 JavaScript 库或程序中?
编辑:我并不是说 JS 继承系统有缺陷,我只是想了解上述功能的好处。
最佳答案
当然可以。我认为此功能最突出的用途是向 jQuery 原型(prototype)(称为“插件”)动态添加方法,它公开为 jQuery.fn
。
我不明白为什么您认为“如果新创建的对象只是复制原型(prototype)属性,语言的语义会简单得多”。为什么会更简单?您可以使用该方法创建对象,使用 extend()
函数,但这会影响原型(prototype)继承的概念。
在 Javascript 中拥有非静态继承是核心特性之一。修改已生成实例的原型(prototype)对象非常有用:
- 添加功能,如上所述。您可以仅在需要时加载整个插件。
- 增强功能(有时)。这通常用于覆盖非标准行为
- 真正改变他们(很少)。这可以与配置对象一起使用,配置对象继承自具有默认设置的对象。然后您可以更改默认设置,它们将适用于所有实例(至少适用于未覆盖相关属性的实例)。
关于javascript - 某些 JavaScript 库是否使用原型(prototype)系统的动态方面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10609822/