javascript:Array.slice.call 到Array.prototype.slice.call

时间:2023-03-08 19:13:27

举个从对象到数组的例子:

var obj={};
obj[1]=1;
obj[2]=2;
obj.length=2;
var arr =Array.prototype.slice.call(obj);
///arr=[1,2]

通过Array.prototype.slice.call生成了一个新的数组,这里能不能通过Array.slice.call(obj)得到相同的结果呢?

通过编译可以知道 Array.slice =slice()        Array.prototype.slice =slice()

而call函数只是一个改变对象上下文的方式,换句话说,只要obj里面有length,就可以完成从对象到新数组的过程

但是结果是不行的

Array.slice==Array.prototype.slice  >> false

但是上面并不能说明问题,猜测是Array.slice里面并没有算法,而是通过引用的方式,比如retrun  this.prototype.slice()

这样的话,当我们调用Array.slice.call(obj)时,由于this已经变成了obj对象,要调用obj.prototype.slice()就无法得到返回结果