Appearance
Array.prototype.push
- 可推入一个元素或者多个元素。
- 返回值是数组长度。
- 在原数组上进行操作,所以会改变原始数组。
- 具有通用性,类似数组对象可以继承使用(在类数组中会介绍)。
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
- 从数组的首部插入。
- 可插入一个元素或者多个元素。
- 返回值是数组的长度。
- 具有通用性,可以被类数组对象使用(类数组章节介绍)。
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
}