Change Array.prototype in node.js(更改node.js中的Array.type)
问题描述
我希望使某些函数可用于我的所有数组。
例如,我想要一个删除重复项的函数:
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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:更改node.js中的Array.type
基础教程推荐
- 悬停时滑动输入并停留几秒钟 2022-01-01
- 有没有办法使用OpenLayers更改OpenStreetMap中某些要素 2022-09-06
- 角度Apollo设置WatchQuery结果为可用变量 2022-01-01
- Karma-Jasmine:如何正确监视 Modal? 2022-01-01
- 动态更新多个选择框 2022-01-01
- 在 JS 中获取客户端时区(不是 GMT 偏移量) 2022-01-01
- 在for循环中使用setTimeout 2022-01-01
- 我什么时候应该在导入时使用方括号 2022-01-01
- 响应更改 div 大小保持纵横比 2022-01-01
- 当用户滚动离开时如何暂停 youtube 嵌入 2022-01-01