【发布时间】:2021-09-14 14:15:32
【问题描述】:
我想做这样的事情
class lapla {
constructor(array){
this.array =
}
sum = () => this.array.reduce((p , c) => p + c , 0) //this function sum up all of the array items
}
Array.prototype.awesome = new lapla( /* i want to add here the array context*/ this)
console.log([1,2,3].awesome.sum() // i want to sum up all array items
但如您所知,这种方法行不通 我怎样才能实现这样的目标
【问题讨论】:
-
有点像an XY problem。你能解释一下是什么促使你这样做吗?因为这似乎是一种过于复杂的方法。也许一个更简单的可能会更好。
-
很抱歉给您带来不便,但我想要的是:制作一个小型库来帮助我轻松地对数组进行一些处理,而 sum 函数就是这里的示例。我想在 [1,2,3].mylibrary.sum() 末尾写类似的东西来总结所有数组项
-
扩展数组类怎么样?
class MyArray extends Array { sum() { /* your code */} }可以做到这一点,而无需修改内置对象。更改原生原型被认为是非常糟糕的做法。另一种选择是制作一个包装器,然后像yourLib([1, 2, 3]).sum()一样使用它。然后你只需要使用数组。最简单的方法是只定义获取您需要的所有数据的函数:sum([1, 2, 3])。最后两种方法被 Lodash 等库使用,您可以在其中使用函数或包装输入和调用方法。 -
我只想向数组原型添加一个对象,我认为这不会对我的项目产生严重影响,但反过来我将能够编写更紧凑的代码,只需编写 [1,2 ,3].mylibrary.sum()
标签: javascript node.js reactjs ecmascript-6