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

标签 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]]

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

最佳答案

DANGEROUS APPROACH(免责声明:P):
我不提倡扩展原生对象,所以以下解决方案仅作为引用一种实现方式但在实践中非常不鼓励。请参阅:THE DANGERS OF EXTENDING NATIVE OBJECTS

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


A BETTER APPROACH: extend the array instance of someArr with the addItem function (and NOT the native Array object):

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

// set property 'addItem' on someArr to equal named function expression
someArr.addItem = function addItem(itemName, quality, quantity) {
  this.push([itemName, quality, quantity]);
};

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

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

关于javascript - 添加函数作为 Array native 对象的方法(是否可以将函数作为方法调用?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43024567/

相关文章:

javascript - 你可以使用 HTML5 本地存储来存储文件吗?如果没有,怎么办?

JavaScript - 数组作为函数参数在每个 for 循环中都会更改

java - 如何调用使用可能未初始化的数组作为参数的方法?

java - 如何在数据库中记录我的java程序流程?

python - 在线程中运行类方法(python)

javascript - 新标签窗口在一段时间后尝试打开时被阻止

javascript - 用于检查数组长度的 Firebase 安全规则

javascript - Extjs 4 - 关联 hasMany 不会在 loadData 上加载嵌套列表

c - 如何在 C 中将整数与所需时间连接起来?

javascript - 如何使用 Javascript/JQuery 生成表单中所有输入名称 =""字段的列表