1

使用原型创建的 JavaScript 对象保持与其原型的“实时”连接,因此更改原型也会影响从它创建的对象。

如果新创建的对象只是从原型中复制所有内容然后忘记它,那么语言的语义会简单得多。当然,实际的底层实现可能更智能。

实时/动态连接的这种特性是否实际用于某些知名的 JavaScript 库或程序中?

编辑:我并不是说 JS 继承系统有缺陷,我只是想了解上述功能的好处。

4

3 回答 3

5

一定。我认为这个特性最突出的用途是动态添加方法到 jQuery 原型(称为“插件”),它被暴露为jQuery.fn.

我不明白为什么你认为“如果新创建的对象只是复制原型属性,语言的语义会简单得多”。为什么会更简单?您可以使用该方法创建对象,使用extend()函数,但这会颠覆原型继承的概念。

在 Javascript 中具有非静态继承是核心功能之一。修改已生成实例的原型对象很有用:

  • 添加功能,如上所述。只有在需要时才能加载整个插件。
  • 增强功能(有时)。这通常用于覆盖非标准行为
  • 真正改变它们(很少)。这可以与配置对象一起使用,这些对象继承自具有默认设置的对象。然后您可以更改默认设置,它们将适用于所有实例(至少适用于没有覆盖相关属性的实例)。
于 2012-05-15T22:44:47.587 回答
0

在最近的一次演讲中,Brendan Eich 将 Javascript 描述为一种“目标”语言,这使得 Jquery 或 CoffeeScript 等库可以在其上编写,库原型用于更快地公开常用函数和方法,查看 javascript很好的原型示例的游戏框架

于 2012-05-15T22:49:18.790 回答
0

这种活力存在于修补旧浏览器的 polyfill 库中,例如通过添加Array.prototype.map或添加来自 ES6 的即将推出的新功能,例如Array.prototype.find. 有关示例,请参见https://github.com/paulmillr/es6-shim/ 。

于 2015-03-11T12:12:30.730 回答