使用自定义方法扩展数组

时间:2018-06-17 05:25:58

标签: javascript

我想扩展Array以便为其添加自定义方法。

这是我尝试这样做的:

class DataArray extends Array {
  constructor() {
    super();
  }
  add(item) {
    this.push(item);
  }
}

const dataArray = new DataArray();
dataArray.add(1);

但是会给出错误Uncaught TypeError: dataArray.add is not a function

只有当我使用Babel或Typescript编译代码时才会发生错误。

2 个答案:

答案 0 :(得分:0)

似乎不支持简写方法定义,请尝试使用箭头函数赋值:

class DataArray extends Array {
  constructor() {
    super();
  }
  add = (item) => {
    this.push(item);
  }
}

const dataArray = new DataArray();
dataArray.add(1);
console.log(dataArray);

你的版本仍然很好,它可能是这个REPL中的解释器版本,如果你尝试自己的例子在jsbin中说,它可以正常工作

答案 1 :(得分:-2)

如果您想改进内置的javascript数组,可以使用原型。 (在此示例中,将方法remove添加到javascript内置Array类型以从Array中删除给定元素):

  Array.prototype.remove = function () {
      var array   = this;
      for (var i = 0; i < arguments.length; i++) {
          for (var j = 0; j < array.length; j++) {
              if (arguments[i] === array[j]) {
                  array.splice(j, 1);
              }
          }
      }
      return array;
  };

  // Usage: [1, 2, 3].remove([1, 2]);