var array = TO_OBJECT(this);
var n = TO_LENGTH(array.length);
var m = arguments.length;
// Subtract n from kMaxSafeInteger rather than testing m + n >
// kMaxSafeInteger. n may already be kMaxSafeInteger. In that case adding
// e.g., 1 would not be safe.
if (m > kMaxSafeInteger - n) throw %make_type_error(kPushPastSafeLength, m, n);
for (var i = 0; i < m; i++) {
array[i+n] = arguments[i];
}
var new_length = n + m;
array.length = new_length;
return new_length;
这样在遍历的时候会多出
length
和push
,自己过滤一下就好了https://github.com/v8/v8/blob...
补充最高票内容 push的实现
this
需要的条件只是length
属性当然可以了,但是需要给对象添加一个
length
的属性,至于为什么可以这么做,去看看v8源码中对push
的定义就好,简单来说只要满足key
是number
的,并且还有length
属性就可以用push
。这样就可以了吧!不知道是否满足你的需求。
首先你需要把这个对象变成一个类数组对象,给它再加个属性,
length:2
,此时这个对象就变成了具有一些数组方法的类数组对象,然后使用Array.prototype.push.call()
方法调用数组的push方法即可