添加函数作为Array本机对象的方法(是否可以将函数作为方法调用?)

Pap*_*000 5 javascript methods function

我觉得我可能在MDN文档或其他东西中错过了一些非常简单的东西,但我已经挖了一段时间了,我不知道.

有没有办法以类似于方法的方式调用函数?这基本上就是我要做的事情:

function addItem(itemName, quality, quantity /*, arr*/) {
  arr.push([itemName, quality, quantity]);
}

var someArr = [['item', 1, 1]];

someArr.addItem('someOtherItem', 2, 3);
// someArr === [['item', 1, 1], ['someOtherItem', 2, 3]]
Run Code Online (Sandbox Code Playgroud)

现在,请注意,我不是要创建构造函数或将变量定义为函数.此外,我完全清楚我可以简单地将数组作为参数添加并正常调用该函数.我想要完成的是以一种方式运行一个函数,当它被标记为数组方法时,将以指定的方式影响该数组.我怎样才能做到这一点?我可以这样做吗?

Pin*_*eda 3

危险的方法(免责声明:P):
我不提倡扩展本机对象,因此以下解决方案仅作为实现它的一种参考方法,但在实践中非常不鼓励。请参阅:扩展本机对象的危险

Array.prototype.addItem = function addItem(itemName, quality, quantity) {
  this.push([itemName, quality, quantity]);
}

var someArr = [['item', 1, 1]];

someArr.addItem('someOtherItem', 2, 3);

console.log(someArr); 
// logs out: [["item", 1, 1], ["someOtherItem", 2, 3]]
Run Code Online (Sandbox Code Playgroud)

在新方法内部使用时this,将其设置为调用该方法的对象。在此示例中,this将是数组someArr


更好的方法:使用 函数扩展数组实例(而不是本机数组对象):someArraddItem

Array.prototype.addItem = function addItem(itemName, quality, quantity) {
  this.push([itemName, quality, quantity]);
}

var someArr = [['item', 1, 1]];

someArr.addItem('someOtherItem', 2, 3);

console.log(someArr); 
// logs out: [["item", 1, 1], ["someOtherItem", 2, 3]]
Run Code Online (Sandbox Code Playgroud)