Maison interface Web js tutoriel Compréhension de la chaîne de prototypes et de l'héritage en js

Compréhension de la chaîne de prototypes et de l'héritage en js

Sep 09, 2017 am 11:38 AM
javascript 理解 继承

La chaîne de prototypes en js fait partie des connaissances difficiles à comprendre, et l'héritage dépend de la chaîne de prototypes, donc la chaîne de prototypes est quelque chose que nous devons maîtriser. Avant de découvrir la chaîne de prototypes, nous devons présenter le prototype. Il est recommandé que cette partie se concentre sur la compréhension, et la mémorisation par cœur n'est pas recommandée.


1. Prototype

Seuls les objets de fonction en js ont des prototypes, et les prototypes sont également des objets. Par exemple, nous créons une fonction de sauvegarde et vérifions son type via typeof. La valeur de retour est "object", indiquant qu'il s'agit en fait d'un objet.

                                                                                                                                                                                                                                                                                                  En imprimant le résultat, nous pouvons voir que le prototype contient deux parties, l'une est un
constructeur et l'autre est un proto. Commençons par comprendre le constructeur, et nous présenterons proto plus tard.
Compréhension de la chaîne de prototypes et de lhéritage en jsFigure 2 Prototype d'objet fonction
Ceux qui ont étudié Java savent que constructeur signifie constructeur, qui contient certaines informations sur le constructeur, telles que les paramètres, l'appelant, etc.
Comme mentionné précédemment, seuls les objets fonctionnels ont des prototypes, mais les objets ordinaires ont-ils des prototypes ? Ce qui suit est vérifié à travers un exemple et un objet fileSave est construit via save.

Compréhension de la chaîne de prototypes et de lhéritage en jsFigure 3 Objet ordinaire
Comme le montre l'exemple ci-dessus, les objets ordinaires n'ont pas de prototypes, mais ils ont des attributs
proto. Résumé : De l'analyse ci-dessus, nous avons appris que les objets fonctionnels ont des attributs de prototype, tandis que les objets ordinaires n'ont pas d'attributs de prototype.

2. Chaîne de prototypes

L'implémentation de la chaîne de prototypes s'appuie sur l'attribut

proto, qui peut être compris comme un pointeur en langage C. , dans une citation Java. En js, que pointe proto ? Toujours à titre d'exemple, imprimons l'attribut proto de fileSave :
Compréhension de la chaîne de prototypes et de lhéritage en jsFigure 4 Le
proto de l'objet Avez-vous trouvé quelque chose Le proto
de fileSave est la même que le prototype de l'objet de fonction de sauvegarde dans la figure 2, c'est-à-dire que proto pointe vers le prototype de sauvegarde. Nous savons que l'objet fileSave est créé via new save();, nous concluons donc que le proto de fileSave pointe vers le prototype de son objet constructeur. Afin de vérifier le résultat, nous créons à nouveau un objet imageSave via save et examinons sa valeur d'attribut proto.
Nous avons constaté à nouveau que le Compréhension de la chaîne de prototypes et de lhéritage en jsproto
d'imageSave pointe vers le prototype de sauvegarde. On peut donc savoir que le proto de l'objet pointe vers le prototype de son constructeur. Ensuite, save est aussi un objet, et son prto doit pointer vers le prototype de son constructeur, c'est-à-dire le prototype de Function.
De plus, on sait dès la première section que le prototype est aussi un objet, quelle est la direction de son attribut Compréhension de la chaîne de prototypes et de lhéritage en jsproto
? Parlant avec un exemple, la valeur save.prototype.proto est imprimée ci-dessous.
Figure 5 save.prototype.Compréhension de la chaîne de prototypes et de lhéritage en jsproto
De la figure 5, nous savons que la valeur de save.prototype.proto
est le prototype de Objet. Nous sommes très curieux de connaître la valeur du proto de Obejct.prototype. Imprimons-le et voyons.
est nul, ce qui est compréhensible. Après tout, il s'agit en fait de l'objet de niveau supérieur. Compréhension de la chaîne de prototypes et de lhéritage en jsÀ partir de l'analyse ci-dessus, le diagramme de chaîne suivant est obtenu :


Figure 6 Chaîne prototype Compréhension de la chaîne de prototypes et de lhéritage en jsRésumé : Grâce à l'analyse de cette section, nous avons appris que la mise en œuvre de la chaîne prototype repose sur les objets attribut
proto
. Si vous créez un objet via un objet fonction, alors l'attribut proto de l'objet pointe vers le prototype de son constructeur. 3. Héritage Avant de parler d'héritage, apprenons d'abord la recherche d'attributs. En js, il recherchera les attributs en fonction de la chaîne de prototypes. S'il ne l'a pas, il recherchera en fonction des attributs
proto
. Écrivons d'abord un exemple de code.

save.fileName = "oo"save.prototype.fileName = "lili";fileSave.fileName = "haha";
Copier après la connexion

Compréhension de la chaîne de prototypes et de lhéritage en js
Si nous imprimons la valeur de fileSave.fileName à ce moment-là, il est évident que ce que nous obtenons est "haha". Mais si je supprime fileSave.fileName = "haha";, que sera le résultat lors de la nouvelle impression ?
Compréhension de la chaîne de prototypes et de lhéritage en js
D'après les résultats de l'impression, nous savons que l'attribut fileName sera trouvé en fonction de l'attribut proto, c'est-à-dire que les attributs requis seront interrogés selon le diagramme de chaîne dans Graphique 5. Ici, s'il n'y a pas de save.prototype.fileName = "lili"; ce code d'affectation, ce qui est imprimé n'est pas défini, car il n'y a pas d'attribut correspondant dans la chaîne de prototypes. Certaines personnes peuvent se demander pourquoi "oo" n'est pas affiché. En effet, nous pouvons voir le code d'affectation save.fileName = "oo" à partir du code, mais nous devons savoir que save est un objet fonction lorsque ce code est exécuté, finName. sera Sous le constructeur, pas dans le prototype, similaire aux propriétés statiques en Java (ici, elles ne sont pas accessibles via l'objet instance).
Rappelez-vous : lors de l'appel d'une propriété via un objet normal, la recherche ne sera trouvée que dans les propriétés du prototype, pas dans le constructeur. S'il n'est pas trouvé dans le prototype de sauvegarde, il sera recherché dans save.proto, et ainsi de suite.
Si vous savez comment trouver des propriétés, alors la mise en œuvre de l'héritage est très simple. Par exemple, nous créons un objet vide saveDisk. Si je veux accéder au fileName dans save, il suffit de définir la valeur de proto de saveDisk égale au prototype de save (simplement compris comme reliant deux éléments non liés). objets en fer) ensemble).

saveDisk._proto_ = save.prototype
Copier après la connexion

Compréhension de la chaîne de prototypes et de lhéritage en js

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.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

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)

Explication détaillée de l'héritage des fonctions C++ : Comment utiliser le « pointeur de classe de base » et le « pointeur de classe dérivé » dans l'héritage ? Explication détaillée de l'héritage des fonctions C++ : Comment utiliser le « pointeur de classe de base » et le « pointeur de classe dérivé » dans l'héritage ? May 01, 2024 pm 10:27 PM

Dans l'héritage de fonction, utilisez le « pointeur de classe de base » et le « pointeur de classe dérivée » pour comprendre le mécanisme d'héritage : lorsque le pointeur de classe de base pointe vers l'objet de classe dérivé, une transformation ascendante est effectuée et seuls les membres de la classe de base sont accessibles. Lorsqu’un pointeur de classe dérivée pointe vers un objet de classe de base, une conversion vers le bas est effectuée (dangereuse) et doit être utilisée avec prudence.

Comment l'héritage et le polymorphisme affectent-ils le couplage de classes en C++ ? Comment l'héritage et le polymorphisme affectent-ils le couplage de classes en C++ ? Jun 05, 2024 pm 02:33 PM

L'héritage et le polymorphisme affectent le couplage des classes : l'héritage augmente le couplage car la classe dérivée dépend de la classe de base. Le polymorphisme réduit le couplage car les objets peuvent répondre aux messages de manière cohérente via des fonctions virtuelles et des pointeurs de classe de base. Les meilleures pratiques incluent l'utilisation de l'héritage avec parcimonie, la définition d'interfaces publiques, l'évitement de l'ajout de données membres aux classes de base et le découplage des classes via l'injection de dépendances. Un exemple pratique montrant comment utiliser le polymorphisme et l'injection de dépendances pour réduire le couplage dans une application de compte bancaire.

Explication détaillée de l'héritage des fonctions C++ : Comment déboguer les erreurs d'héritage ? Explication détaillée de l'héritage des fonctions C++ : Comment déboguer les erreurs d'héritage ? May 02, 2024 am 09:54 AM

Conseils de débogage des erreurs d’héritage : assurez-vous que les relations d’héritage sont correctes. Utilisez le débogueur pour parcourir le code et examiner les valeurs des variables. Assurez-vous d'utiliser correctement le modificateur virtuel. Examinez le problème des diamants d'héritage causé par l'héritage caché. Recherchez les fonctions virtuelles pures non implémentées dans les classes abstraites.

L'héritage des fonctions C++ expliqué : Quand l'héritage ne doit-il pas être utilisé ? L'héritage des fonctions C++ expliqué : Quand l'héritage ne doit-il pas être utilisé ? May 04, 2024 pm 12:18 PM

L'héritage de fonctions C++ ne doit pas être utilisé dans les situations suivantes : Lorsqu'une classe dérivée nécessite une implémentation différente, une nouvelle fonction avec une implémentation différente doit être créée. Lorsqu'une classe dérivée ne nécessite pas de fonction, elle doit être déclarée comme une classe vide ou utiliser des fonctions membres de la classe de base privées et non implémentées pour désactiver l'héritage des fonctions. Lorsque les fonctions ne nécessitent pas d'héritage, d'autres mécanismes (tels que des modèles) doivent être utilisés pour réaliser la réutilisation du code.

Explication détaillée de l'héritage des fonctions C++ : Comment comprendre la relation « est-un » et « a-un » dans l'héritage ? Explication détaillée de l'héritage des fonctions C++ : Comment comprendre la relation « est-un » et « a-un » dans l'héritage ? May 02, 2024 am 08:18 AM

Explication détaillée de l'héritage de fonction C++ : Maîtriser la relation entre "is-a" et "has-a" Qu'est-ce que l'héritage de fonction ? L'héritage de fonction est une technique en C++ qui associe des méthodes définies dans une classe dérivée à des méthodes définies dans une classe de base. Il permet aux classes dérivées d'accéder et de remplacer les méthodes de la classe de base, étendant ainsi les fonctionnalités de la classe de base. Relations « est-un » et « a-un » Dans l'héritage de fonctions, la relation « est-un » signifie que la classe dérivée est un sous-type de la classe de base, c'est-à-dire que la classe dérivée « hérite » des caractéristiques et du comportement de la classe de base. La relation « possède un » signifie que la classe dérivée contient une référence ou un pointeur vers l'objet de classe de base, c'est-à-dire que la classe dérivée « possède » l'objet de classe de base. SyntaxeVoici la syntaxe permettant d'implémenter l'héritage de fonction : classDerivedClass:pu

'Introduction à la programmation orientée objet en PHP : du concept à la pratique' 'Introduction à la programmation orientée objet en PHP : du concept à la pratique' Feb 25, 2024 pm 09:04 PM

Qu'est-ce que la programmation orientée objet ? La programmation orientée objet (POO) est un paradigme de programmation qui résume les entités du monde réel en classes et utilise des objets pour représenter ces entités. Les classes définissent les propriétés et le comportement des objets, et les objets instancient les classes. Le principal avantage de la POO est qu’elle rend le code plus facile à comprendre, à maintenir et à réutiliser. Concepts de base de la POO Les principaux concepts de la POO incluent les classes, les objets, les propriétés et les méthodes. Une classe est le modèle d'un objet, qui définit ses propriétés et son comportement. Un objet est une instance d’une classe et possède toutes les propriétés et comportements de la classe. Les propriétés sont les caractéristiques d'un objet pouvant stocker des données. Les méthodes sont des fonctions d'un objet qui peuvent opérer sur les données de l'objet. Avantages de la POO Les principaux avantages de la POO sont les suivants : Réutilisabilité : la POO peut rendre le code plus

Comment comprendre correctement la méthode de transmission de valeur en PHP Comment comprendre correctement la méthode de transmission de valeur en PHP Mar 08, 2024 pm 03:30 PM

Comment comprendre correctement la méthode de transmission de valeurs en PHP PHP est un langage de script largement utilisé dans le développement Web, et les méthodes de transmission de paramètres en PHP incluent principalement la transmission de valeurs et la transmission de références. Et comprendre comment les valeurs sont transmises en PHP est crucial pour écrire du code efficace. Cet article discutera en détail de la méthode de transmission de valeurs en PHP et utilisera des exemples de code spécifiques pour aider les lecteurs à mieux comprendre. Le concept de base de la méthode de transmission de valeur est de copier la valeur d'une variable et de la transmettre à une fonction ou une méthode. Les opérations sur la valeur dans la fonction ne l'affecteront pas.

Compréhension approfondie de la façon d'utiliser les pipelines Linux Compréhension approfondie de la façon d'utiliser les pipelines Linux Feb 21, 2024 am 09:57 AM

Compréhension approfondie de l'utilisation des tubes Linux Dans le système d'exploitation Linux, les tubes sont une fonction très utile qui peut utiliser la sortie d'une commande comme entrée d'une autre commande, réalisant ainsi facilement divers traitements et opérations de données complexes. Une compréhension approfondie de la façon dont les canaux Linux sont utilisés est très importante pour les administrateurs système et les développeurs. Cet article présentera les concepts de base des pipelines et montrera comment utiliser les pipelines Linux pour le traitement des données et les opérations à travers des exemples de code spécifiques. 1. Concepts de base des pipes sous Linux

See all articles