7
votes

Puis-je créer mon propre objet Array dans JavaScript?

J'ai créé une application JavaScript qui a beaucoup de manipulations de tableau (tri, filtrage, etc.).

Mes fonctions sont comme ceci: P>

myArray.function(arg1, arg2,...)


2 commentaires

Continuez à utiliser la fonction, vous n'avez pas besoin de tout dans OOP


Juste, mais j'aime bien votre propreté, par exemple pour enchaîner ou définir des options / arguments par défaut.


5 Réponses :


5
votes

non. Array code> ne peut pas être sous-classé et se comporter toujours comme un tableau. Plus précisément, la propriété code> code> ne changera pas pour refléter les éléments ajoutés ou supprimés de la matrice.

function MyArray() {}
MyArray.prototype = [];
MyArray.prototype.constructor = MyArray;
var instance = new MyArray;
instance[0] = 0;
alert(instance.length);  // alerts 0


3 commentaires

Curieusement, si vous utilisez la méthode .Push () pour stocker des données sur la matrice, la longueur des mises à jour correctement.


@ZLATINZLATEV, les candidats récents de la carte ECMascript ont pour objectif de permettre le sous-classement des éléments tels que le tableau, le regex et la date de sorte que cette réponse ne soit donc pas correcte pour beaucoup plus longtemps. Peut-être que vous voyez un comportement dans des moteurs JavaScript récents qui mettent en œuvre un soutien au sous-classement des tableaux.


Eh bien, au moins la dernière version de Chrome et la dernière version de Rhino Moteur (jusqu'à la date d'aujourd'hui - 31.Aug.2015) ont le comportement décrit par vous et moi.



0
votes

Oui, il suffit d'étendre le prototype de tableau avec jquery.extend


0 commentaires

5
votes

Vous pouvez simplement ajouter la fonction directement à votre objet plutôt que sur le prototype:

var myArray = new Array();
myArray.myFunc = function(){ /* do stuff! */ };
myArray.myFunc();


0 commentaires

10
votes

Vous avez deux options:

Option One est d'étendre l'objet en ajoutant de nouvelles méthodes à celui-ci: xxx

L'avantage est que chaque matrice JavaScript aura maintenant cette méthode supplémentaire. Cela peut également être un désavantage lorsque des bibliothèques JavaScript multiples (externes) tentent d'ajouter les mêmes méthodes. De plus, cette nouvelle méthode apparaîtra dans pour (Var Article dans myARray) Constructions qui peuvent être problématiques.

option deux est de créer une "méthode d'usine" pour votre réseau étendu: xxx

Vous pouvez maintenant écrire ceci pour créer un nouveau tableau étendu: xxx


1 commentaires

Je pense que la méthode d'usine est exactement ce dont j'ai besoin pour mon application spécifique. C'est tellement évident ... pas que je le vois :-) Merci!



1
votes

i Créez ceci qui est ma version de matry, mais avec quelques modifications de ce tableau, vous ne pouvez pas modifier la longueur comme avec le tableau d'origine

let fullNames = names.map(nam => nam +' Nawaz');
console.log(fullNames); //MyArray {0: "Ali Nawaz", 1: "Hadi Nawaz", 2: "Amber Nawaz"}


0 commentaires