我无法理解Array.prootype.slice.call

时间:2016-02-06 23:35:00

标签: javascript

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

//["two", "three", "four"]

为什么会这样? length属性在哪里?调用["two", "three", "four", 4]时不应该是Array.prototype.slice.call( temp, 1)吗?

1 个答案:

答案 0 :(得分:3)

切片的简化版本:

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
}

因此实际切片函数在[]上使用.length运算符和this属性。这是关于它如何在数组和类似数组的对象(具有[].length的那些对象)上工作的方式