Maison >interface Web >js tutoriel >Compréhension approfondie de la série JavaScript (26) : Explication détaillée du modèle de constructeur des compétences design patterns_javascript
Présentation
Tout le monde connaît les constructeurs, mais si vous êtes novice, encore faut-il comprendre ce qu'est un constructeur. Un constructeur est utilisé pour créer un objet d'un type spécifique - non seulement il déclare l'objet à utiliser, mais le constructeur peut également accepter des paramètres pour définir les valeurs des membres de l'objet lors de la première création de l'objet. Vous pouvez personnaliser votre propre constructeur et y déclarer des propriétés ou des méthodes d'objets de type personnalisé.
Utilisation de base
En JavaScript, les constructeurs sont généralement utilisés pour implémenter des instances. JavaScript n'a pas le concept de classes, mais il existe des constructeurs spéciaux. En appelant la fonction définie à l'aide du mot-clé new, vous pouvez indiquer à JavaScript que vous souhaitez créer un nouvel objet et les déclarations de membre du nouvel objet sont toutes définies dans le constructeur. À l'intérieur du constructeur, le mot-clé this fait référence à l'objet nouvellement créé. L'utilisation de base est la suivante :
var tom= new Car("Oncle", 2009, 20000);
var dudu= nouvelle voiture("Dudu", 2010, 5000);
console.log(tom.output());
console.log(dudu.output());
L'exemple ci-dessus est un modèle de constructeur très simple, mais il présente quelques problèmes. Tout d'abord, l'utilisation de l'héritage est très gênante. Deuxièmement, output() est redéfini à chaque fois qu'un objet est créé. Le meilleur moyen est de laisser toutes les instances du type Car partager cette méthode output(), de sorte que s'il y en a une grande. nombre d'instances Si c'est le cas, cela économisera beaucoup de mémoire.
Pour résoudre ce problème, nous pouvons utiliser les méthodes suivantes :
fonction formatCar() {
Renvoyez this.model "Gone" this.miles "Kilometers";
>
Constructeur et prototype
La fonction en JavaScript a un attribut de prototype appelé prototype. Lorsqu'un constructeur est appelé pour créer un objet, tous les attributs du prototype du constructeur sont disponibles sur l'objet nouvellement créé. Selon cela, plusieurs instances d'objet Car peuvent partager le même prototype. Développons le code de l'exemple ci-dessus :
.
/*
Remarque : Ici, nous utilisons le nom de la méthode Object.prototype au lieu de Object.prototype
.
Principalement utilisé pour éviter de réécrire l'objet prototype prototype défini
*/
Car.prototype.output=fonction () {
Renvoyez this.model "Gone" this.miles "Kilometers";
};
var tom = new Car("Oncle", 2009, 20000);
var dudu = nouvelle voiture("Dudu", 2010, 5000);
console.log(tom.output());
console.log(dudu.output());
Aussi : Nous recommandons aux constructeurs de commencer par une majuscule pour les distinguer des fonctions ordinaires.
Puis-je utiliser uniquement du neuf ?
Les exemples ci-dessus utilisent tous new pour créer des objets pour la voiture fonctionnelle. Est-ce le seul moyen ? En fait, il existe d'autres moyens, nous en énumérons deux :
//Méthode 1 : Appel en fonction
Car("Oncle", 2009, 20000); //Ajouter à l'objet fenêtre
console.log(window.output());
//Méthode 2 : Appel dans le cadre d'un autre objet
var o = nouvel Objet();
Car.call(o, "Dudu", 2010, 5000);
console.log(o.output());
Forcer le nouveau
L'exemple ci-dessus montre le problème de ne pas utiliser new, y a-t-il donc un moyen pour nous de forcer le constructeur à utiliser le nouveau mot-clé ? La réponse est oui, le code ci-dessus :
var tom = new Car("Oncle", 2009, 20000);
var dudu = Voiture("Dudu", 2010, 5000);
console.log(typeof tom); // "objet"
console.log(tom.output()); // "Oncle a parcouru 20 000 kilomètres"
console.log(typeof dudu); // "objet"
console.log(dudu.output()); // "Dudu a parcouru 5000 kilomètres"
Fonction wrapper originale
Il existe trois fonctions wrapper primitives en JavaScript : nombre, chaîne, booléen. Parfois, les deux sont utilisées :
.
// Ceci est recommandé
var s = "ma chaîne";
var n = 101;
var b = vrai;
//chaîne originale
var greet = new String("Bonjour");
// Divisez
en utilisant la méthode split()
greet.split(' ')[0]; // "Bonjour"
// L'ajout de nouveaux attributs au type de fonction wrapper ne provoquera pas d'erreur
greet.smile = true;
// Les nouvelles propriétés sont accessibles normalement
console.log(typeof greet.smile); // "booléen"
Résumé
Ce chapitre explique principalement comment utiliser le modèle de constructeur, comment l'appeler et la différence entre le nouveau mot-clé. J'espère que tout le monde y prêtera attention lorsqu'il l'utilisera.
Référence : http://www.addyosmani.com/resources/essentialjsdesignpatterns/book/#constructorpatternjavascript