在javascript中扩展Array对象的方法

我尝试扩展Array对象在javascript中的一些用户友好的方法,如Array.Add(),而不是Array.push()等…

我实现3种方法来做到这一点。
不幸的是第三种方式是不工作,我想问为什么?和如何做它的工作。

//------------- 1st way
Array.prototype.Add=function(element){
     this.push(element);
};

var list1 = new Array();
list1.Add("Hello world");
alert(list1[0]);

//------------- 2nd way
function Array2 () {
    //some other properties and methods
};

Array2.prototype = new Array;
Array2.prototype.Add = function(element){
  this.push(element);  
};

var list2 = new Array2;
list2.Add(123);
alert(list2[0]);

//------------- 3rd way
function Array3 () {
    this.prototype = new Array;
    this.Add = function(element){
      this.push(element);  
    };
};

var list3 = new Array3;
list3.Add(456);  //push is not a function
alert(list3[0]); // undefined

在第三种方式我想扩展Array对象内部Array3类。
如何做到这一点,不要得到“推不是一个函数”和“未定义”?

这里我添加第4种方式。

//------------- 4th way
function Array4 () {
    //some other properties and methods
    this.Add = function(element){
        this.push(element);
    };
 };
Array4.prototype = new Array();

var list4 = new Array4();
list4.Add(789);
alert(list4[0]);

这里我再次使用原型。
我希望避免使用额外的线类外构造函数作为Array4.prototype。
我想有一个紧凑的定义类,所有的部分在一个地方。
但我想我不能这样做否则。

方法名称应为小写。原型不应该在构造函数中修改。

function Array3() { };
Array3.prototype = new Array;
Array3.prototype.add = Array3.prototype.push

在CoffeeScript

class Array3 extends Array
   add: (item)->
     @push(item) 

如果你不喜欢该语法,并且你已经从构造函数中扩展它,
您唯一的选择是:

// define this once somewhere
// you can also change this to accept multiple arguments 
function extend(x, y){
    for(var key in y) {
        if (y.hasOwnProperty(key)) {
            x[key] = y[key];
        }
    }
    return x;
}


function Array3() { 
   extend(this, Array.prototype);
   extend(this, {
      Add: function(item) {
        return this.push(item)
      }

   });
};

你也可以这样做

ArrayExtenstions = {
   Add: function() {

   }
}
extend(ArrayExtenstions, Array.prototype);



function Array3() { }
Array3.prototype = ArrayExtenstions;

在olden天,’prototype.js’过去有一个Class.create方法。你可以包装所有这是一个像这样的方法

var Array3 = Class.create(Array, {
    construct: function() {

    },    
    Add: function() {

    }
});

有关这方面的更多信息以及如何实现,请查看prototype.js源代码

翻译自:https://stackoverflow.com/questions/11337849/ways-to-extend-array-object-in-javascript

转载注明原文:在javascript中扩展Array对象的方法