我正在构建JavaScript代码以制作自定义推送功能。我的新功能应该与原始推送功能完全相同。
这是代码。请检查一下。
<script type="text/javascript">
function MyArray(){
this.add=function(x){
return this[this.length]=x;
}
}
MyArray.prototype=Array.prototype;
var collection = new MyArray();
collection.push(44);
collection.add(56); // this is not working.
collection.push(77);
collection.push(88);
console.log(collection);
</script>
答案 0 :(得分:4)
因为您没有使用本机数组,所以length
属性不会自动调整。您需要手动递增,否则下一个push
将覆盖它:
function MyArray(){
this.add=function(x){
return this[this.length++]=x;
}
}
答案 1 :(得分:1)
如果您想使用add
代替push
(因此,请将add
用作push
- 别名),请参阅原始Array.prototype.push
。请参阅片段。该代码段还包含一个自定义addMulti
方法,该方法派生自Array.prototype.push
。
function MyArray(){ }
MyArray.prototype = Array.prototype;
MyArray.prototype.add = Array.prototype.push;
// custom addMulti method, derived from Array.prototype.push
MyArray.prototype.addMulti = function addMulti(arrayOfValues){
[].push.apply(this, arrayOfValues);
};
var foo = new MyArray;
// add and push both work
foo.add(13);
foo.push(17);
foo.add(15,16,18);
foo.push(112);
// push an array of values
foo.addMulti([200,300,400,500]);
var report = new MyArray;
report.add('<code>foo.length: ',foo.length, ', foo: [', foo, ']</code>');
document.querySelector('#result').innerHTML = report.join('');
<div id="result"><div>