Je crée un petit plugin de code qui vous permet de faire des choses avec des tableaux. Je ne veux pas ajouter les fonctions à l'objet de tableau en utilisant une construction de prototype, ce que je veux que les gens peuvent faire quelque chose comme:
arrayFunction([1, 2, 3]).someSpecialArrayFunction();
Ainsi en laissant l'objet de tableau normal non modifié.
Alors je suis venu avec la construction suivante (inspirée du code source jQuery):
var arrayFunction = window.arrayFunction = function(array) {
return new arrayFunction.fn.init(array);
}
arrayFunction.fn = arrayFunction.prototype = {
init: function(array){
this.a = array;
//should I return something here?
},
someSpecialArrayFunction: function(){
//Super cool custom stuff here.
}
}
Toutefois, cela ne fonctionne pas (évidemment). Que devrait-il se passer dans la fonction init()?
L'erreur est maintenant droit que lorsque je tente:
arrayFunction(array).someSpecialArrayFunction();
il est dit que someSpecialArrayFunction() n'est pas une fonction?
Comment devrait-on faire cela?
modifier
Oui, cela est en effet un exemple simpliefied. La chose réelle a beaucoup plus de méthodes.
En outre, je pensais simplement à quel point ce serait génial si cela supportait aussi le chant, comment le feriez-vous?
Le $ pour jquery est en fait un objet. – Malfist
En Javascript, toutes les fonctions sont des objets - vous déclarez réellement des objets en utilisant le mot-clé de la fonction, ainsi le jQuery $ est à la fois un objet et une fonction qui renvoie des instances de cet objet. Cela peut prendre un peu de s'habituer à ... –
Cherchez-vous ici un moyen de faire votre exemple * travail * - ou pour un motif général pour ajouter des méthodes à un objet encapsuleur en les ajoutant au prototype de l'encapsuleur, par exemple. donc vous pouvez gérer de grandes collections de méthodes d'extension? –