Introduction de l'héritage
L'héritage dans JS est un sujet très complexe, beaucoup plus complexe que l'héritage dans tout autre langage orienté objet. Dans la plupart des autres langues orientées objet, hériter d'une classe ne nécessite qu'un seul mot-clé. Afin d'atteindre le but de hériter des membres publics en JS, une série de mesures doit être prise. JS est un héritage prototype. Grâce à cette flexibilité, nous pouvons utiliser l'héritage standard basé sur les classes ou un héritage prototype plus subtil. Il doit être clair dans JS que tout l'héritage est effectué via le prototype, et JS est hérité en fonction des objets.
hériter:
fonction animal (name) {this.name = name; this.showname = function () {alert (this.name); }} fonction cat (name) {animal.call (this, name); } var chat = new Cat ("Black Cat"); cat.showname ();Animal.Call (ceci) signifie utiliser un objet animal au lieu de cet objet. Ensuite, il n'y a pas toutes les propriétés et méthodes d'animaux chez le chat? L'objet CAT peut appeler directement les méthodes et les propriétés des animaux.
Héritage multiple:
Fonction class10 () {this.showsub = fonction (a, b) {alert (ab); }} Fonction class11 () {this.showadd = fonction (a, b) {alert (a + b); }} fonction classe 2 () {class10.call (this); Classe 11.Call (this); }C'est très simple, en utilisant deux appels pour obtenir un héritage multiple
Bien sûr, il existe d'autres méthodes pour hériter de JS, comme l'utilisation de chaînes de prototypes, qui ne tombent pas dans la portée de cet article, mais explique uniquement l'utilisation de l'appel ici. En parlant d'appel, bien sûr, il y a aussi une application. Ces deux méthodes signifient essentiellement la même chose. La différence est que le deuxième paramètre de l'appel peut être de n'importe quel type, tandis que le deuxième paramètre d'application doit être un tableau ou des arguments.
Voici une description de la façon d'implémenter l'héritage simple en JavaScript?
L'exemple suivant créera un employé de classe d'employés qui hérite de toutes les propriétés du prototype prototype de la personne.
Employé de la fonction (nom, sexe, employeeId) {this.name = name; this.sex = sexe; this.employeeid = employeeId;} // pointer le prototype de l'employé vers une instance de personne // Parce que l'instance de personne peut appeler des méthodes dans le prototype de personne, l'instance employée peut également appeler toutes les propriétés dans le prototype de personne. Employee.prototype = new Person (); employee.prototype.getEmployeeId = function () {return this.employeeid;}; var zhang = nouvel employé ("zhangsan", "man", ""); console.log (zhang.getname ()); // "ZhangsanLa mise en œuvre ci-dessus de l'héritage est difficile et il y a de nombreux problèmes:
La personne est instanciée lors de la création d'un constructeur et d'un prototype d'employé (ci-après dénommés de classe), ce qui est inapproprié.
Le constructeur de l'employé ne peut pas appeler le constructeur de la personne de la classe parent, résultant en des affectations répétées de nom et d'attributs sexuels dans le constructeur de l'employé.
Les fonctions dans l'employé remplaceront les fonctions du même nom en personne, sans mécanismes de surcharge (et le précédent est le même problème de type).
La syntaxe pour la création de classes JavaScript est trop dispersée et pas aussi élégante que la syntaxe en C # / Java.
Il y a une erreur dans le pointage de l'attribut constructeur dans l'implémentation.