Heim >Web-Frontend >js-Tutorial >Detaillierte Erläuterung der Verwendung der parasitären kombinierten Vererbung in js

Detaillierte Erläuterung der Verwendung der parasitären kombinierten Vererbung in js

php中世界最好的语言
php中世界最好的语言Original
2018-04-18 16:41:392179Durchsuche

Dieses Mal erkläre ich Ihnen ausführlich die Verwendung von js parasitärer kombinierter Vererbung, was sind die Vorsichtsmaßnahmen bei der Verwendung von js parasitärer kombinierter Vererbung, das Folgende ist praktisch Fälle, einer Steh auf und schau es dir an.

Kombinationsvererbung:

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

Es gibt einen Nachteil der kombinierten Vererbung. Der Konstruktor der übergeordneten Klasse wird zweimal aufgerufen

Zeile 11 legt das Unterklassen-Prototyp Objekt (Prototyp) fest und ruft das erste

auf Rufen Sie in Zeile 9 beim Instanziieren des Objekts erneut

auf Der Zweck des Konstruktors besteht darin, das -Attribut zu kopieren. Der Zweck von Zeile 11 besteht darin, die Methode auf dem Prototypobjekt (Prototyp) zu erhalten alle anderen Methoden

Ist das möglich? Können wir die Methoden für das Prototypobjekt der übergeordneten Klasse abrufen, ohne den Konstruktor der übergeordneten Klasse zu instanziieren? Natürlich können wir parasitäre Vererbung verwenden, um die Methoden für das Prototypobjekt der übergeordneten Klasse abzurufen

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

Tatsächlich handelt es sich bei der parasitären kombinierten Vererbung um einen geliehenen Konstruktor + ein Prototypobjekt, das einer flachen Kopie der übergeordneten Klasse entspricht.

Ich glaube, Sie haben die Methode gemeistert, nachdem Sie den Fall in diesem Artikel gelesen haben Weitere spannende Informationen finden Sie in den anderen verwandten Themen im Artikel zur chinesischen PHP-Website!

Empfohlene Lektüre:



Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Verwendung der parasitären kombinierten Vererbung in js. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn