gpt4 book ai didi

javascript - 更改node.js中的Array.prototype

转载 作者:太空宇宙 更新时间:2023-11-04 02:57:01 25 4
gpt4 key购买 nike

我想让一些函数可用于我的所有数组。

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

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));
}
});

对于您的问题:

Will it work if I just put it in server.js which is run when I type npm start?

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

It would be great if it also works on the client. Is it possible or should I consider server and client strictly separated from one another?

它们是完全独立的。如果您想在客户端上执行此操作,则需要在客户端上添加添加 uniq 的脚本。

Is it bad practice to extend Array.prototype like this? I just think it seems stupid to write the code many times.

对此有两个阵营的想法:

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

  2. 不,这还不错,这就是原型(prototype)的用途。如果以及何时可以处理命名冲突。 TC-39可以搞定。

您必须自行决定是否这样做。

关于javascript - 更改node.js中的Array.prototype,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39579042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com