让我们看一下这段代码:
var mainFunction = function() {
altFunction.apply(null, arguments);
}
传递给 mainFunction
的参数是动态的——它们可以是 4 个或 10 个,无关紧要。但是,我必须将它们传递给 altFunction
并且我必须向参数列表添加一个 EXTRA 参数。
我试过这个:
var mainFunction = function() {
var mainArguments = arguments;
mainArguments[mainArguments.length] = 'extra data'; // not +1 since length returns "human" count.
altFunction.apply(null, mainArguments);
}
但这似乎行不通。我该怎么做?
最佳答案
使用Array.prototype.push
[].push.call(arguments, "new value");
没有必要浅克隆 arguments
对象,因为它和它的 .length
是可变的。
(function() {
console.log(arguments[arguments.length - 1]); // foo
[].push.call(arguments, "bar");
console.log(arguments[arguments.length - 1]); // bar
})("foo");
来自 ECMAScript 5,10.6 Arguments Object
- Call the
[[DefineOwnProperty]]
internal method on obj passing"length"
, the Property Descriptor{[[Value]]: len, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true}
, and false as arguments.
所以你可以看到 .length
是可写的,所以它会用 Array 方法更新。
关于Javascript 添加额外的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13610987/