第一个 JavaScript 框架的思想症结之一是扩展原型与包装函数。 MooTools 和 Prototype 等框架扩展了原型,而 jQuery 和其他较小的框架则没有。每个都有其优点,但最终这些年后我仍然相信扩展原生原型的能力是 JavaScript 的一个巨大特性。让我们看看通过扩展原型来赋能基元的每个实例是多么容易!
每个 JavaScript 原生,如Number
、 String
、 Array
、 Object
等,都有一个prototype
。 prototype
上的每个方法都被该对象的每个实例继承。例如,我们可以通过扩展其原型为每个Array
实例提供unique
方法:
Array.prototype.unique = function() { 返回 [...new Set(this)]; } ['1', '1', '2'].unique(); // ['1', '2'] new Array('1', '1', '2').unique(); // ['1', '2']
请注意,如果您还可以通过返回this
来确保链接功能:
['1', '1', '2'].unique().reverse(); // ['2', '1']
扩展原型的最大批评一直是名称冲突,其中最终的规范实现与框架实现不同。虽然我理解这个论点,但您可以使用前缀函数名称来对抗它。为原生原型添加超能力让每个实例都拥有它是如此有用,以至于我永远不会告诉别人不要扩展原型。 #MooToolsFTW。
如何使用 JavaScript 扩展原型的帖子首先出现在David Walsh 博客上。