我需要创建一个Javascript函数来创建自定义推送功能

时间:2014-12-14 09:41:48

标签: javascript arrays

我正在构建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>

2 个答案:

答案 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>