Maison interface Web js tutoriel Pourquoi avez-vous besoin d'utiliser JavaScript pour implémenter l'héritage ? Explication détaillée d'exemples de plusieurs méthodes d'héritage

Pourquoi avez-vous besoin d'utiliser JavaScript pour implémenter l'héritage ? Explication détaillée d'exemples de plusieurs méthodes d'héritage

Jul 20, 2017 pm 03:55 PM
javascript js Pourquoi

Pourquoi avez-vous besoin d'utiliser JavaScript pour implémenter l'héritage ?

Les performances des premières machines PC ne sont vraiment pas flatteuses. Toute la pression est du côté du serveur et du navigateur client. c'est purement pour la décoration. Associé à la disposition des tables et à l'accès Internet par ligne téléphonique populaire à cette époque, la navigation sur une page Web était très lente ; aujourd'hui, l'ère Internet se développe rapidement, le matériel informatique personnel a été considérablement amélioré et les performances des navigateurs clients sont également très décevantes. Le modèle de développement Web évolue également tranquillement : le serveur n'est plus aussi « dur » qu'avant, le navigateur doit assumer autant de tâches que possible. De cette manière, la pression est répartie sur chaque client. l'entreprise Les économies de coûts rendent également le développement Web front-end plus intéressant - de plus en plus de frameworks front-end émergent, et même de nombreux frameworks MVC front-end ont vu le jour. Dans ce contexte, le rôle de JavaScript ne consiste certainement pas seulement à effectuer une simple vérification, à envoyer des requêtes ou à exploiter du DOM. Il doit jouer davantage de rôles comme le routage frontal et la couche métier, et JavaScript doit faire beaucoup de choses logiques. tâches. , qui incluent l'abstraction des données frontales (c'est-à-dire le modèle), et ce n'est qu'en utilisant la pensée orientée objet que les données abstraites peuvent être correctement traitées, l'héritage est donc très important ici.

Extrayez maintenant un modèle nommé Personne de la réception, qui a les attributs de base nom et âge. Par défaut, tout le monde peut parler, donc la fonction parlante est placée sur l'objet prototype pour que chaque instance puisse en profiter. Maintenant, pour l’Homme, il doit hériter des attributs de base de la Personne et ajouter ses propres attributs uniques sur cette base.


function Person (name, age) {
  this.name = name;
  this.age = age;
}
Person.prototype.say = function(){
  console.log('hello, my name is ' + this.name);
};
function Man() {
  //my own properties
}
Copier après la connexion

Plusieurs méthodes d'héritage traditionnelles :

1. Héritage de chaîne de prototypes


function Person (name, age) {
  this.name = name;
  this.age = age;
}
Person.prototype.say = function(){
  console.log('hello, my name is ' + this.name);
};
function Man() {
}
Man.prototype = new Person('pursue');
var man1 = new Man();
man1.say(); //hello, my name is pursue
var man2 = new Man();
console.log(man1.say === man2.say);//true
console.log(man1.name === man2.name);//true
Copier après la connexion

Cette méthode d'héritage est très directe Afin d'obtenir toutes les méthodes d'attribut de Person (instance et prototype), ajoutez directement l'instance de la classe parent new Person('poursuite'. ) est affecté au prototype de la sous-classe. En fait, les instances de la sous-classe man1 et man2 elles-mêmes sont des objets complètement vides. Toutes les propriétés et méthodes doivent être trouvées sur la chaîne de prototypes, donc les propriétés et méthodes trouvées sont les mêmes.
Il est donc irréaliste d'utiliser directement l'héritage de chaîne de prototypes.

2. Utiliser l'héritage du constructeur


function Person (name, age) {
  this.name = name;
  this.age = age;
}
Person.prototype.say = function(){
  console.log('hello, my name is ' + this.name);
};
function Man(name, age) {
  Person.apply(this, arguments);
}
//Man.prototype = new Person('pursue');
var man1 = new Man('joe');
var man2 = new Man('david');
console.log(man1.name === man2.name);//false
man1.say(); //say is not a function
Copier après la connexion

Ici, la sous-classe utilise apply dans le constructeur pour appeler le parent Le constructeur de La classe, afin d'obtenir l'effet d'hériter des propriétés de la classe parent, est bien meilleure que d'utiliser directement la chaîne de prototypes. Au moins, chaque instance a sa propre part de ressources. Cependant, cette méthode ne peut hériter que des propriétés de l'instance. la classe parent, il est donc préférable de trouver Sans la méthode say, afin d'hériter de toutes les propriétés et méthodes de la classe parent, la chaîne de prototypes doit être modifiée, introduisant ainsi la méthode d'héritage combinée.

3. Héritage combiné


function Person (name, age) {
  this.name = name;
  this.age = age;
}
Person.prototype.say = function(){
  console.log('hello, my name is ' + this.name);
};
function Man(name, age) {
  Person.apply(this, arguments);
}
Man.prototype = new Person();
var man1 = new Man('joe');
var man2 = new Man('david');
console.log(man1.name === man2.name);//false
console.log(man1.say === man2.say);//true
man1.say(); //hello, my name is joe
Copier après la connexion

Il convient de noter que les attributs d'instance de man1 et man2 remplacent en fait le prototype. attributs , mais il n'est pas nécessaire de remplacer la méthode say sur le prototype (car ils ne l'ont pas), donc ici man1.say === man2.say renvoie toujours true, vous devez donc faire très attention au prototype propriétés qui ne sont pas écrasées, car elles sont communes à toutes les instances de.

4. Héritage combiné parasitaire

Pour être honnête, je ne sais pas comment s'appelle la forme suivante, mais c'est en effet la plus populaire et classique méthode d'héritage JavaScript. En fait, il suffit de comprendre la structure de l'objet prototype :


function Person (name, age) {
      this.name = name;
      this.age = age;
    }
Person.prototype.say = function(){
  console.log('hello, my name is ' + this.name);
};
function Man(name, age) {
  Person.apply(this, arguments);
}
Man.prototype = Object.create(Person.prototype);//a.
Man.prototype.constructor = Man;//b.
var man1 = new Man('pursue');
var man2 = new Man('joe');
console.log(man1.say == man2.say);
console.log(man1.name == man2.name);
Copier après la connexion

En fait, la seule différence entre l'héritage combiné parasite et l'héritage combiné ci-dessus l'héritage est la construction de l'objet prototype de sous-classe (a. et b.), la méthode Object.creat(obj) est utilisée ici, qui fera une copie superficielle de l'objet obj entrant, similaire à :


function create(obj){
  function T(){};
  T.prototype = obj;
  return new T();
}
Copier après la connexion

Par conséquent, a. connectera bien l'objet prototype de la sous-classe à l'objet prototype de la classe parent, au lieu de copier directement le prototype de la sous-classe comme l'héritage combiné général. (Comme Man.prototype = new Person();), il s'agit simplement d'un écrasement très violent des propriétés. La méthode d'héritage de combinaison parasite hérite séparément des attributs d'instance et des attributs de prototype, ce qui est plus raisonnable dans la mise en œuvre.

Remarque : le code b. ne modifiera pas le résultat de instanceof, mais il est plus rigoureux pour les scénarios où un constructeur est nécessaire.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Pourquoi les zones réduites pourpre dans la disposition Flex sont-elles considérées à tort «espace de débordement»? Pourquoi les zones réduites pourpre dans la disposition Flex sont-elles considérées à tort «espace de débordement»? Apr 05, 2025 pm 05:51 PM

Questions sur les zones de slash violet dans les dispositions flexibles Lorsque vous utilisez des dispositions flexibles, vous pouvez rencontrer des phénomènes déroutants, comme dans les outils du développeur (D ...

La production de pages H5 nécessite-t-elle une maintenance continue? La production de pages H5 nécessite-t-elle une maintenance continue? Apr 05, 2025 pm 11:27 PM

La page H5 doit être maintenue en continu, en raison de facteurs tels que les vulnérabilités du code, la compatibilité des navigateurs, l'optimisation des performances, les mises à jour de sécurité et les améliorations de l'expérience utilisateur. Des méthodes de maintenance efficaces comprennent l'établissement d'un système de test complet, à l'aide d'outils de contrôle de version, de surveiller régulièrement les performances de la page, de collecter les commentaires des utilisateurs et de formuler des plans de maintenance.

Pourquoi les feuilles de style personnalisées peuvent-elles prendre effet sur les pages Web locales de Safari mais pas sur les pages Baidu? Pourquoi les feuilles de style personnalisées peuvent-elles prendre effet sur les pages Web locales de Safari mais pas sur les pages Baidu? Apr 05, 2025 pm 05:15 PM

Discussion sur l'utilisation de styles de style personnalisés dans Safari aujourd'hui, nous allons discuter d'une question sur l'application de feuilles de style personnalisées pour le navigateur Safari. Novice frontal ...

Quels sont les avantages de la production de pages H5 Quels sont les avantages de la production de pages H5 Apr 05, 2025 pm 11:48 PM

Les avantages de la production de pages H5 comprennent: une expérience légère, une vitesse de chargement rapide et une amélioration de la rétention des utilisateurs. Compatibilité multiplateforme, pas besoin de s'adapter à différentes plates-formes, améliorant l'efficacité du développement. Flexibilité et mises à jour dynamiques, aucun audit requis, ce qui facilite la modification et la mise à jour du contenu. Les coûts de développement rentables et économiques que les applications natives.

JS peut-il fonctionner sans H5? JS peut-il fonctionner sans H5? Apr 06, 2025 am 09:06 AM

JavaScript est-il disponible pour s'exécuter sans HTML5? Le moteur JavaScript lui-même peut fonctionner indépendamment. L'exécution de JavaScript dans un environnement de navigateur dépend de HTML5 car il fournit l'environnement standardisé requis pour charger et exécuter du code. Les API et les fonctionnalités fournies par HTML5 sont cruciales pour les frameworks et bibliothèques JavaScript modernes. Sans environnements HTML5, de nombreuses fonctionnalités JavaScript sont difficiles à implémenter ou ne peuvent pas être implémentées.

La relation entre la table bootstrap brouillé et le codage de pages La relation entre la table bootstrap brouillé et le codage de pages Apr 07, 2025 pm 12:03 PM

La table de bootstrap Briked est généralement due au codage de la page est incompatible avec le codage des données de la table. Pour résoudre ce problème, vous devez vous assurer qu'ils sont cohérents. Les étapes spécifiques incluent: Vérification de la page et du codage des données de table, définissant le codage de la page et vérification du codage. Si UTF-8 est utilisé, le serveur doit également le prendre en charge. S'il ne peut pas être résolu, essayez d'utiliser la bibliothèque d'encodage JavaScript.

Pourquoi l'utilisation du style de nom de classe de l'exemple officiel du site Web dans le projet Element-Plus n'a-t-il aucun effet? Pourquoi l'utilisation du style de nom de classe de l'exemple officiel du site Web dans le projet Element-Plus n'a-t-il aucun effet? Apr 05, 2025 pm 07:27 PM

Comment utiliser correctement le style de nom de classe dans Element-plus? Dans le processus d'utilisation des éléments et plus, de nombreux développeurs rencontreront un problème: pourquoi seuls ...

Impossible de se connecter à MySQL en tant que racine Impossible de se connecter à MySQL en tant que racine Apr 08, 2025 pm 04:54 PM

Les principales raisons pour lesquelles vous ne pouvez pas vous connecter à MySQL en tant que racines sont des problèmes d'autorisation, des erreurs de fichier de configuration, des problèmes de mot de passe incohérents, des problèmes de fichiers de socket ou une interception de pare-feu. La solution comprend: vérifiez si le paramètre Bind-Address dans le fichier de configuration est configuré correctement. Vérifiez si les autorisations de l'utilisateur racine ont été modifiées ou supprimées et réinitialisées. Vérifiez que le mot de passe est précis, y compris les cas et les caractères spéciaux. Vérifiez les paramètres et les chemins d'autorisation du fichier de socket. Vérifiez que le pare-feu bloque les connexions au serveur MySQL.

See all articles