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)吗?

最佳答案

切片的简化版本:

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的对象)的工作方式

关于javascript - 我不明白Array.prootype.slice.call,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35247861/

10-16 10:52