Maison  >  Article  >  interface Web  >  Explication détaillée de l'utilisation de l'héritage combiné parasite dans js

Explication détaillée de l'utilisation de l'héritage combiné parasite dans js

php中世界最好的语言
php中世界最好的语言original
2018-04-18 16:41:392146parcourir

Cette fois je vous apporte une explication détaillée de l'utilisation de l' héritage combiné parasite js, quelles sont les précautions lors de l'utilisation de l'héritage combiné parasite js, les suivantes sont pratiques cas, un Levez-vous et jetez un œil.

Héritage combiné :

function Person( uName ){
      this.skills = [ 'php', 'javascript' ];
      this.userName = uName;
    }
    Person.prototype.showUserName = function(){
      return this.userName;
    }
    function Teacher ( uName ){
      Person.call( this, uName );
    }
    Teacher.prototype = new Person();
    var oT1 = new Teacher( 'ghostwu' );
    oT1.skills.push( 'linux' );
    var oT2 = new Teacher( 'ghostwu' );
    console.log( oT2.skills ); //php,javascript
    console.log( oT2.showUserName() ); //ghostwu

Il y a un inconvénient de l'héritage combiné. Le constructeur de la classe parent sera appelé deux fois. Ligne 11, définit le prototype de sous-classe

objet

(prototype) et appelle le premier Ligne 9, lors de l'instanciation de l'objet, appelez à nouveau

Le but du constructeur est de copier l'attribut

. La ligne 9 est définitivement indispensable. Le but de la ligne 11 est d'obtenir la méthode sur l'objet prototype de la classe parent (prototype). toutes les autres méthodes Est-ce possible ? Pouvons-nous obtenir les méthodes sur l’objet prototype de la classe parent sans instancier le constructeur de la classe parent ? Bien sûr, on peut utiliser l'héritage parasite pour récupérer les méthodes sur l'objet prototype de la classe parent

En fait, pour parler franchement, l'héritage combiné parasite est un constructeur emprunté + un objet prototype équivalent à une copie superficielle de la classe parent
function Person( uName ){
      this.skills = [ 'php', 'javascript' ];
      this.userName = uName;
    }
    Person.prototype.showUserName = function(){
      return this.userName;
    }
    function Teacher ( uName ){
      Person.call( this, uName );
    }
    function object( o ){
      var G = function(){};
      G.prototype = o;
      return new G();
    }
    function inheritPrototype( subObj, superObj ){
      var proObj = object( superObj.prototype ); //复制父类superObj的原型对象
      proObj.constructor = subObj; //constructor指向子类构造函数
      subObj.prototype = proObj; //再把这个对象给子类的原型对象
    }
    inheritPrototype( Teacher, Person );
    var oT1 = new Teacher( 'ghostwu' );
    oT1.skills.push( 'linux' );
    var oT2 = new Teacher( 'ghostwu' );
    console.log( oT2.skills ); //php,javascript
    console.log( oT2.showUserName() ); //ghostwu

Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour plus d'informations intéressantes, veuillez prêter attention aux autres sujets connexes dans l'article du site Web PHP chinois !

Lecture recommandée :



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