0

首先,如果答案很明显和/或很容易找到,我想找个借口。我没有找到任何完整的答案。

问题很简单:

var array1 = Array().slice.call(arguments,1);
var array2 = Array.prototype.slice.call(arguments,1);

他们做同样的事情。你能对对象、日期、字符串等原型做这样的事情吗

4

2 回答 2

1

是的,您可以,因为每个实例都继承自其构造函数的原型。

(new Array()).slice(或更好,[].slice)与 完全相同的方法Array.prototype.slice

于 2012-05-14T16:06:59.997 回答
1

第二种方法更好,因为您没有创建一个未使用的数组。使用第一种方法,您正在构建一个数组,然后使用动态原型链解析来定位它的 slice 方法,然后您call使用您的参数作为上下文。第二种方法直接访问该slice方法,因此您避免了对象创建和原型链解析,所以一切都更好。

于 2012-05-14T16:07:46.823 回答