Maison > Article > interface Web > Héritage et autres héritages dans les astuces JavaScript_javascript
Introduction à l'héritage
L'héritage en JS est un sujet très complexe, bien plus complexe que l'héritage dans tout autre langage orienté objet. Dans la plupart des autres langages orientés objet, hériter d’une classe ne nécessite qu’un seul mot-clé. Afin d’atteindre l’objectif d’hériter des membres publics de JS, une série de mesures doivent être prises. JS appartient à l'héritage prototypique. Grâce à cette flexibilité, nous pouvons utiliser soit un héritage prototypique basé sur les classes, soit un héritage prototypique plus subtil. Il devrait être clair dans JS que tout héritage se fait via un prototype et que JS hérite en fonction des objets.
Hérité :
function Animal(name){ this.name = name; this.showName = function(){ alert(this.name); } } function Cat(name){ Animal.call(this, name); } var cat = new Cat("Black Cat"); cat.showName();
Animal.call(this) signifie Si vous utilisez l'objet Animal à la place de cet objet, alors Cat a toutes les propriétés et méthodes d'Animal. L'objet Cat peut appeler directement les méthodes et propriétés d'Animal.
Héritage multiple :
function Class10() { this.showSub = function(a,b) { alert(a-b); } } function Class11() { this.showAdd = function(a,b) { alert(a+b); } } function Class2() { Class10.call(this); Class11.call(this); }C'est très simple, utiliser deux appels pour obtenir un héritage multiple Bien sûr, l'héritage js Il existe d'autres méthodes, telles que l'utilisation de la chaîne de prototypes. Cela n'entre pas dans le cadre de cet article. J'explique simplement l'utilisation de call ici. En parlant d'appel, et bien sûr d'appliquer, ces deux méthodes signifient fondamentalement la même chose. La différence est que le deuxième paramètre de call peut être de n'importe quel type, tandis que le deuxième paramètre de apply doit être un tableau ou des arguments.
Laissez-moi vous présenter comment implémenter l'héritage simple en JavaScript ?
function Employee(name, sex, employeeID) { this.name = name; this.sex = sex; this.employeeID = employeeID; } // 将Employee的原型指向Person的一个实例 // 因为Person的实例可以调用Person原型中的方法, 所以Employee的实例也可以调用Person原型中的所有属性。 Employee.prototype = new Person(); Employee.prototype.getEmployeeID = function() { return this.employeeID; }; var zhang = new Employee("ZhangSan", "man", ""); console.log(zhang.getName()); // "ZhangSanLa mise en œuvre ci-dessus de l'héritage est très approximative et il existe de nombreux problèmes : Lors de la création du constructeur et du prototype Employee (ci-après appelée classe), Person est instanciée, ce qui est inapproprié.