Maison  >  Article  >  interface Web  >  Explication détaillée de la méthode d'héritage JavaScript (2)

Explication détaillée de la méthode d'héritage JavaScript (2)

零到壹度
零到壹度original
2018-03-22 14:24:21910parcourir

Cet article commence par écrire quelques fonctions d'outils pour implémenter des extensions de classe. Chaque fonction utilitaire est ciblée sur une manière (habitudes) spécifique d’écrire des cours. Cet article écrit des classes selon la méthode constructeur : les attributs (champs) et les méthodes y sont tous accrochés. Les classes suivantes sont fournies respectivement en tant que classes parentes et sous-classes.

/

/  父类Person
function Person(nationality) {
    this.nationality = nationality;
    this.setNationality = function(n) {this.nationality=n;};
    this.getNationality = function() {return this.nationality;};
}
// 子类Man
    function Man(name) {
    this.name = name;
    this.setName = function(n){this.name=n;};
    this.getName = function(){return this.name;};
}

1, héritez de la première fonction de l'outil

/**
 * @param {Function} subCls 子类
 * @param {Function} superCls 父类
 * @param {Object} param 父类构造参数
 */
function extend(subCls, superCls, param) {
superCls.call(subCls.prototype, param);
}

et utilisez-le comme suit

extend(Man, Person, 'China');
var m = new Man('jack');
console.log(m.nationality);//China
console.log(m.setNationality('Japan'));
console.log(m.getNationality('Japan'));//Japan

Le résultat montre que Man hérite des attributs et de toutes les méthodes de Person. Cette méthode d'héritage est très différente de Java.

class Animal {
int legs;
Animal(int l) {
legs = l;
}
int getLegs() {
return legs;
}
}
public class Person extends Animal{
//属性(字段)
String name;
//构造方法(函数)
Person(int legs, String name) {
super(legs);//调用父类构造器
this.name = name;
}
//方法
String getName() {
return this.name;
}
public static void main(String[] args) {
Person p = new Person(2,"jack");
System.out.println(p.legs);
}
}

En Java, la sous-classe Person appelle la méthode de construction de la classe parent super(legs) dans sa propre méthode de construction, et ajoute directement la classe parent lors de la création d'un objet. . Le paramètre de construction legs:2 est transmis, pas seulement votre propre nom :jack. L'héritage JavaScript ci-dessus consiste à transmettre les paramètres de construction de la classe parent (le troisième paramètre de la fonction d'extension) lors de l'extension, et non lors de la création. Lors de la gestion des effectifs, transmettez les paramètres de construction de la classe parent. D'accord, simulez Java pour implémenter extend. Ici, la référence de la classe parent est intelligemment stockée temporairement dans la sous-classe.

2, héritez de la fonction outil deux

/**
 * @param {Function} subCls
 * @param {Function} superCls
 */
function extend(subCls, superCls) {
subCls.supr = superCls;
}

ou utilisez Person comme classe parent pour implémenter la sous-classe Woman

function Woman(nationality, name) {
Woman.supr.call(this, nationality);//和java有点类似哦,在子类中调用父类构造器
this.name = name;
this.setName = function(n){this.name=n;};
this.getName = function(){return this.name;};
}
extend(Woman, Person);

Enfin, la manière de créer un objet est similaire à Java, c'est-à-dire que lorsqu'il est nouveau, le paramètre de construction de la classe parent (nationalité : Japon) est transmis en même temps.

var w = new Woman('Japan', 'lily');
console.log(w.nationality);//Japan
w.setNationality('U.S.A');
console.log(w.getNationality());//U.S.A

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:
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