Les moyens d'étendre la Matrice de l'objet en javascript

j'essaie d'étendre l'objet de Tableau en javascript avec des méthodes respectueuses de type Array.Ajouter() à la place de Tableau.push (), etc...

- je mettre en œuvre 3 façons de le faire.
unfortunetly la 3ème voie n'est pas de travail et j'ai envie de demander pourquoi? et comment le faire fonctionner.

//------------- 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

dans la 3ème voie que je veux étendre le Tableau d'objet interne Array3 classe.
Comment faire en sorte de ne pas devenir "push n'est pas une fonction" et "undefined"?

Ici, j'ai ajouter un 4ème.

//------------- 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]);

Ici j'ai utiliser prototype.
J'espère pour éviter d'utiliser des lignes supplémentaires à l'extérieur de constructeur de classe comme Array4.le prototype.
Je voulais avoir un compact classe définie avec toutes les pièces en un seul endroit.
Mais je pense que je ne peux pas faire autrement.

  • Si vous ajoutez une méthode de Matrice de vous briser foreach() sur les tableaux
  • Avez-vous regardé dans le café script? Je vais mettre à jour ma réponse avec un exemple
  • je ne vais pas ajouter une méthode à la Matrice.prototype comme dans le 1er exemple. C'était un test. Je vais créer une classe qui permettra d'étendre l'objet de Tableau. Par exemple jsArray. Le jsArray objets seront des Tableaux, mais avec plus de fonctionnalités.
  • j'ai vu aujourd'hui le café de script. je n'ai pas aimé sa syntaxe.
  • si quelqu'un utilise mon personnalisée lib js peut régler sa foreach() de ne pas inclure les 2 derniers éléments de l'énumération de cause, il est le type de l'objet et de sa longueur.
  • Dans tous les exemples que vous étendre Tableau dans un nouveau type (par exemple, Array3). Existe-il des raisons de ne pas prolonger un Tableau, comme l'OP premier exemple? Array.prototype.add = Array.prototype.push;

InformationsquelleAutor demosthenes | 2012-07-05