我觉得 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 theaddItem
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/