Cet article décrit l'utilisation du prototype dans JS. Partagez-le pour votre référence. L'analyse spécifique est la suivante:
Le phototype dans JS est une partie difficile de JS à comprendre
Cet article est basé sur les points de connaissance suivants:
1 mode de conception prototype
Dans .NET, vous pouvez utiliser clone () pour implémenter la méthode prototype
L'idée principale de la méthode du prototype est qu'il existe maintenant une classe A. Je veux créer une classe B. Cette classe est prototypée par A et peut être élargie. Nous appelons le prototype de B A A.
2 Les méthodes JavaScript peuvent être divisées en trois catégories:
Méthode de classe A
B MÉTHODE DE L'OBJET
C Méthode du prototype
Les exemples sont les suivants:
Function People (Name) {this.name = name; 1 = NOUVELLES PERSONNES ("Notage"); P1.IntroDuce ();3 Obj1.func.Call (OBJ)
Cela signifie considérer l'OBJ comme obj1 et appeler la méthode FUNC
Ok, les problèmes suivants sont résolus un par un:
Que signifie le prototype?
Chaque objet dans JavaScript a un attribut prototype.
A.prototype = new b ();
La compréhension du prototype ne doit pas être confondue avec l'héritage. Le prototype de A est une instance de B. On peut comprendre que A a cloné toutes les méthodes et propriétés en B. A peut utiliser les méthodes et les propriétés de B. Ce qui est souligné ici, c'est le clonage plutôt que l'héritage. Cela peut se produire: le prototype de A est une instance de B, et le prototype de B est également une instance de A.
Jetons un coup d'œil à un exemple d'expérience:
fonction baseclass () {this.showmsg = function () {alert ("baseclass :: showmsg");}} function extendClass () {} extendClass.prototype = new Baseclass (); var instance :: showmsglass; instance.showmsg ();Nous définissons d'abord la classe Baseclass, puis nous voulons définir la classe extensible, mais nous avons l'intention d'utiliser une instance de Baseclass comme prototype de clone EXTLASS de clone contient également la méthode d'objet Showmsg.
ExtendClass.prototype = new Baseclass () peut être lu car: ExtendClass est créé avec une instance de Baseclass en tant que prototype de clonage.
Ensuite, il y aura une question, que se passerait-il si ExtendClass lui-même contient une méthode avec le même nom que la méthode BaseClass?
Voici l'expérience étendue 2:
fonction baseclass () {this.showmsg = function () {alert ("baseclass :: showmsg");}} function prolongée () {this.showmsg = function () {alert (extendClass :: showmsg "); : showmsgPreuve expérimentale: lorsqu'une fonction est en cours d'exécution, elle ira d'abord à la fonction de l'ontologie pour rechercher. Ou on peut comprendre que le prototype ne clonera pas les fonctions du même nom.
Ensuite, il y aura une autre nouvelle question:
Et si je souhaite utiliser une instance de la classe ExtendClass pour appeler la méthode de l'objet de Baseclass showmsg?
La réponse est d'utiliser l'appel:
extendClass.prototype = new Baseclass (); var instance = new ExtendClass (); var Baseinstance = new Baseclass (); baseinstance.showmsg.call (instance); // Show BaseClass :: showmsg
Ici BasserInstance.ShowmsG.Call (instance);
Ok, quelqu'un peut demander ici pourquoi pas baseclass.showmsg.call (instance);
C'est la différence entre les méthodes d'objet et les méthodes de classe.
Enfin, si le code suivant est compris clairement, alors ce que cet article dit est déjà compris:
<Script Type = "Text / JavaScript"> Function Baseclass () {this.showmsg = function () {alert ("Baseclass :: showmsg"); fonction extendClass () {this.showmsg = function () {alert ("extendClass :: showmsg"); }} extendClass.showmsg = function () {alert ("extendClass :: showmsg static")} extendClass.prototype = new Baseclass (); var instance = newtlAndClass (); instance.showmsg (); ExtendClass :: showmsgbaseclass.showmsg.call (instance); Baseinstance = new BaseClass (); Baseinstance.showmsg.Call (instance); // Show Baseclass :: showmsg </cript>J'espère que cet article sera utile à la programmation JavaScript de tous.