大型解决方案的全球原型JavaScript / Node

问题描述

是否有最佳实践来为模块化JavaScript的全局范围的类(如Array,Number等)编写原型?

例如,我有一个 create-react-app 应用程序,我想找到一种将原型添加到全局范围的好方法

arrayHelpers.js

Array.prototype.unique = () => {
   //... some code
};

SomeComponent.js

export default const SomeComponent = () => {
   const someArray = ["foo","bar","foo"];
   const someArrayThatHasOnlyUniqueItems = someArray.unique(); // ["foo",bar"]

   // ... more code 
};

我不想使用像 unique(array)这样的经典函数,因为原型更加简洁易用。

此外,将任何文件导入每个组件都不是最好的方法

解决方法

扩展本机原型非常令人讨厌。 This is how you break the internet!

您可以通过扩展现有的数组类型来创建自定义数组类型(在这种情况下,您将必须在创建一个的每个文件中导入自定义数组):

class MyArray extends Array {
  function unique() {
    //...
  }
}
const someArray = new MyArray("foo","bar")

您可以扩展Array的Symbols原型(在这种情况下,您必须将Symbol导入到使用该功能所需的每个文件中):

const unique = new Symbol('unique')
Array.prototype[unique] = () => { ... }
// ...
someArray[unique]()

但是可能最好的方法是简单地使其成为一个独立的函数:

function unique(array) {
  // ...
}
unique(someArray)

是的,就像大多数好的代码一样,它很无聊。

是的,它不那么含糖(但是,如果您喜欢糖,则可以随时编写自己的Babel插件)。

是的,您必须将其导入到任何地方(大多数JS项目在每个文件上都有很多导入)。

是的,这是这样做的方式。