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)
现在,请注意,我不是要创建构造函数或将变量定义为函数.此外,我完全清楚我可以简单地将数组作为参数添加并正常调用该函数.我想要完成的是以一种方式运行一个函数,当它被标记为数组方法时,将以指定的方式影响该数组.我怎样才能做到这一点?我可以这样做吗?
危险的方法(免责声明: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。
更好的方法:使用 函数扩展数组实例(而不是本机数组对象):
someArraddItemRun Code Online (Sandbox Code Playgroud)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]]