使用原型创建的JavaScript对象维护与其原型的“实时”连接,因此更改原型也会影响从其创建的对象。
如果新创建的对象只是复制了原型中的所有内容然后忘记了它,那么语言的语义就会简单得多。当然,实际的底层实现可能更加智能。
实时/动态连接的这个功能是否实际用于一些众所周知的JavaScript库或程序?
编辑:我不是建议JS继承系统存在缺陷,我只是想了解上述功能的好处。答案 0 :(得分:5)
当然。我认为这个功能最突出的用途是动态地将方法添加到jQuery原型(称为“插件”),它被公开为jQuery.fn
。
我无法理解为什么你认为“如果新创建的对象只是复制了原型属性,那么语言的语义就会简单得多”。为什么这会更简单?您可以使用extend()
函数创建具有该方法的对象,但这会在头部敲击原型继承的概念。
在Javascript中拥有非静态继承是其中一个核心功能。修改已生成的实例的原型对象非常有用:
答案 1 :(得分:0)
在最近的一次演讲中,Brendan Eich将Javascript描述为一种“目标”语言,使得像Jquery或CoffeeScript这样的库可以在其上面编写,库原型用于更快地暴露常用函数和方法,看看在一个javascript游戏框架内,为原型的很好的例子
答案 2 :(得分:0)
这种动态存在于填充旧浏览器的polyfill库中,例如:通过添加Array.prototype.map
,或添加来自ES6的即将推出的新功能,例如: Array.prototype.find
。有关示例,请参阅https://github.com/paulmillr/es6-shim/。