更改node.js中的Array.type

本教程将介绍更改node.js中的Array.type的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

更改node.js中的Array.type 教程 第1张

问题描述

我希望使某些函数可用于我的所有数组。

例如,我想要一个删除重复项的函数:

Array.prototype.uniq = function () {
  return Array.from(new Set(this));
};

但我希望在我的整个node.js项目中使用此函数。

如果我只将它放入server.js,当我键入npm start时它会运行吗?

如果它也能在客户端运行,那就太好了。是否可以或我应该考虑将服务器和客户端严格分开?

像这样扩展Array.prototype是不是很糟糕?我只是觉得多次编写代码似乎很愚蠢。

其他选项可以是使用

function uniquify(arr) {
  return Array.from(new Set(arr));
}

array.uniq()似乎比uniquify(array)好。

推荐答案

首先:如果要向Array.prototype添加属性,通过简单赋值添加它们。这样做会创建可枚举的属性,并且默认情况下依赖不具有任何可枚举属性的数组的代码将中断。

因此改用defineProperty

Object.defineProperty(Array.prototype, "uniq", {
 value: function uniq() {
return Array.from(new Set(this));
 }
});

回答您的问题:

如果我只将它放入server.js,当我键入npm start时它会运行吗?

我不确定server.js您在说什么,但如果您要修改的文件是Node的内置部分或npm而不是您的项目的一部分,我强烈建议这样做。

如果它也能在客户端运行,那就太好了。是否可以或我应该考虑将服务器和客户端严格分开?

它们是完全分开的。如果要在客户端执行此操作,则需要包括在客户端添加uniq的脚本。

像这样扩展Array.prototype是不是很糟糕?我只是觉得多次编写代码似乎很愚蠢。

关于这一点有两个阵营:

    是的,很糟糕。您可能会遇到命名冲突,因为其他人添加了自己的、不同的uniq。组合来自多个来源的代码正变得非常非常常见,这增加了出现这些问题的可能性。该语言的未来版本可能会添加uniq。由于指导语言的委员会(TC-39)试图避开潜在的冲突,如果您的客户端库变得流行起来,这将使他们的工作变得更加困难。(MooTools不止一次。)

    不,这不坏,这就是原型的用途。如果和何时,命名冲突都可以处理。TC-39可以接受。

你必须自己决定是否做这件事。

好了关于更改node.js中的Array.type的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。