让我们来看看这段代码:
var mainFunction = function() {
altFunction.apply(null, arguments);
}
Run Code Online (Sandbox Code Playgroud)
传递给"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);
}
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用,我该怎么做?
I H*_*azy 58
使用 Array.prototype.push
[].push.call(arguments, "new value");
Run Code Online (Sandbox Code Playgroud)
没有必要浅层克隆arguments对象,因为它和它.length是可变的.
(function() {
console.log(arguments[arguments.length - 1]); // foo
[].push.call(arguments, "bar");
console.log(arguments[arguments.length - 1]); // bar
})("foo");
Run Code Online (Sandbox Code Playgroud)
来自ECMAScript 5,10.6 Arguments Object
[[DefineOwnProperty]]在obj传递"length",属性描述符{[[Value]]: len, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true}和false作为参数上调用内部方法.
所以你可以看到它.length是可写的,所以它会用Array方法更新.
Vis*_*ioN 31
arguments不是纯数组.你需要制作一个普通的数组:
var mainArguments = Array.prototype.slice.call(arguments);
mainArguments.push("extra data");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27299 次 |
| 最近记录: |