Skip to content

Array.prototype.push

  1. 可推入一个元素或者多个元素。
  2. 返回值是数组长度。
  3. 在原数组上进行操作,所以会改变原始数组。
  4. 具有通用性,类似数组对象可以继承使用(在类数组中会介绍)。
js
Array.prototype.myPush = function () {
    // 保存this
    var origin = this,
        // 保存当前_this的长度
        originLen = Number(origin.length),
        // 保存实际参数列表
        args = arguments,
        // 保存实际参数列表长度
        argsLen = args.length,
        // 浮标
        index = 0

    // 无length属性抛出错误
    if (originLen < 0 || !originLen) {
        throw new TypeError('origin no length propety...')
    }

    // 循环
    while (index < argsLen) {
        origin[originLen++] = args[index]
        index++
    }
    return originLen
}

Array.prototype.unshift

  1. 从数组的首部插入。
  2. 可插入一个元素或者多个元素。
  3. 返回值是数组的长度。
  4. 具有通用性,可以被类数组对象使用(类数组章节介绍)。
js
Array.prototype.myUnshift = function () {
    // 保存origin
    var origin = this,
        // 保存实际参数列表
        args = arguments,
        // 保存示例参数列表的长度
        argsLen = args.length
    // 浮标
    index = 0

    for (var i = 0; i < argsLen; i++) {
        var item = origin[i]
        // 注意[origin.length]必须每次都需要获取,因为数组的长度变化了。
        // 这地方的结果你需要打印看一看, 类似[1, 2, 1, 2, 1, 2]这种
        origin[origin.length] = item
    }

    // 将填充的元素用实际参数填充
    while (index < argsLen) {
        origin[index] = args[index++]
    }
    // 返回的是原始数组长度
    return origin.length
}