Javascript 我能';无法理解Array.prootype.slice.call

Javascript 我能';无法理解Array.prootype.slice.call,javascript,Javascript,为什么会有这样的结果?length属性在哪里?当调用Array.prototype.slice.call(temp,1)时,它不应该是[“二”,“三”,“四”,四] temp = {0:'one', 1:'two', 2:'three', 3:'four',length:4}; console.log( Array.prototype.slice.call( temp, 1)); //["two", "three", "four"] Array.prototype.slice=函数(a,b)

为什么会有这样的结果?
length
属性在哪里?当调用
Array.prototype.slice.call(temp,1)
时,它不应该是
[“二”,“三”,“四”,四]

temp = {0:'one', 1:'two', 2:'three', 3:'four',length:4};
console.log( Array.prototype.slice.call( temp, 1));

//["two", "three", "four"]
Array.prototype.slice=函数(a,b){
a=a | | 0
如果(a<0)a+=此长度
b=b | |此长度
如果(b<0)b+=此长度
var ret=[]
对于(变量i=a;i
所以实际上,slice函数使用
[]
运算符和
上的
属性
。这就是它在数组和类似数组的对象(具有
[]
.length
的对象)上的工作方式。

slice()在仅复制调用它的对象的数字键后返回一个新数组。数组有一个.length属性,所以temp.length告诉您它的长度。
Array.prototype.slice = function(a, b) {
  a = a || 0
  if (a < 0) a += this.length
  b = b || this.length
  if (b < 0) b += this.length
  var ret = []
  for (var i = a; i < b; i++)
    ret.push(this[i])
  return ret
}