【问题标题】:How to add object of methods into Array Object to use along the project如何将方法对象添加到数组对象中以在项目中使用
【发布时间】: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


【解决方案1】:

const array = [1, 2, 3];

Array.prototype.sum = function() {
return this.reduce((sum , key)=> sum + key )
}

console.log(array.sum())

多重属性

const array = [1, 2, 3, 4];

const objectFunctions = {
  sum: {
    value: function() {
      return this.reduce((cS, key) => cS + key)
    }
  },
  multiply: {
    value: function() {
      return this.reduce((cS, key) => cS * key)
    }
  }
}

Object.defineProperties(Array.prototype, objectFunctions );

console.log(array.multiply());
console.log(array.sum())

【讨论】:

  • 感谢您的回答,但我想将我所有的方法都包装在一个对象中。所以我可以在里面找到它们。这使我能够编写类似 array.awesome.sum() 的东西
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-25
  • 2021-01-13
  • 1970-01-01
相关资源
最近更新 更多