有人能详细解释一下这行代码中每个术语的实际用途吗?我知道这是为了将参数对象转换成一个实数组,但我不明白它是怎么做到的。
var args = (arguments.length === 1?[arguments[0]]:Array.apply(null, arguments));发布于 2016-02-26 02:07:39
function someFunc() {
var args = Array.prototype.slice.call(arguments);
return args;
}
someFunc(1,2,3); //[1, 2, 3]arguments对象是每个函数本地的类似数组的对象(而不是数组),它为传递到函数中的每个参数都包含一个条目。
在上面的代码中,我们使用Array.prototype来创建一个数组实例。它也可以这样写成var args = [].slice.call(arguments);。
然后我们使用slice()方法。Slice可以用于类似数组的对象(在本例中是我们的arguments对象),只要您将该方法绑定到该对象。对于本例中的绑定,我们使用call()。您还可以使用其他绑定函数,如apply()。
call()方法接受arguments对象,该对象是为slice()提供的this值。
值得注意的是,在EcmaScript 2015中,这可以使用Rest parameters和spread operator以一种更简单的方式完成。以下是ES2015的等价物:
function someFunc(...args) {
return args;
}
someFunc(1,2,3); //[1, 2, 3]https://stackoverflow.com/questions/35633948
复制相似问题