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

时间:2017-03-26 03:12:18

标签: javascript function methods

我觉得我可能在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]]




现在,请注意,我没有尝试制作构造函数或将变量定义为函数。此外,我完全清楚我可以简单地添加数组作为参数并将函数调用为正常。我想要完成的是以一种方式运行函数,当以数组方法表示时,将以指定的方式影响该数组。我怎样才能做到这一点?我可以这样做吗?

2 个答案:

答案 0 :(得分:3)

危险方法(免责声明:P):
我不主张扩展本机对象,因此以下解决方案仅作为参考一种方式实现但实际上 非常气馁 。请参阅:THE DANGERS OF EXTENDING NATIVE OBJECTS

(venv)[ec2-user@ip-112-31-10-129 src]$ sudo nano /etc/selinux/semanage.conf

在新方法中使用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]] 并将其设置为调用该方法的对象。对于此示例,this将是数组this

  

更好的方法:扩展someArr 数组实例   someArr函数(和 NOT 本机Array对象):

     
addItem
     

答案 1 :(得分:2)

other answer所示修改Array原型的替代方法,如果适用于您的情况,您可以将方法添加到特定数组(或对象):

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

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

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

var otherArray = [42];
otherArray.addItem('someOtherItem', 2, 3); // fails as otherArray does not have addItem.

请注意,这不会向所有数组(或对象)添加方法,而只会添加到您修改过的某个特定数组。这实际上可能对于添加非常特定的方法(例如在这种情况下)而非像summax这样的非常通用的情况有益,这些方法对许多类型的数组(或对象)有意义。

相关问题