Heim > Web-Frontend > js-Tutorial > Hauptteil

Was sind die Vererbungsmethoden von js? Einführung in verschiedene Möglichkeiten zur Implementierung der Vererbung in js

不言
Freigeben: 2018-08-11 16:40:08
Original
6102 Leute haben es durchsucht

In diesem Artikel erfahren Sie, was die Vererbungsmethoden von js sind. Eine Einführung in verschiedene Möglichkeiten zur Implementierung der Vererbung in js hat einen gewissen Referenzwert. Ich hoffe, dass sie für Sie hilfreich ist.

1. Die Art und Weise, wie js die Vererbung implementiert: Prototypenkette

Implementierungsmethode: Eine Instanz von A-Prototyp ist ein Attribut von B-Prototyp

Nein Vergessen Sie, dass das Objekt standardmäßig in der Prototypenkette vorhanden ist. Das Hinzufügen von Methoden zu Unterklassen oder das Überschreiben von Superklassenmethoden muss nach der Ersetzungsprototypanweisung platziert werden.

Nachdem die Vererbung über die Prototypenkette implementiert wurde, können keine Objektliterale verwendet werden . Erstellen Sie Methoden und Attribute, da die Prototypenkette neu geschrieben wird

Nachdem die Vererbung über die Prototypenkette implementiert wurde, werden die Referenztypattribute der Superklasse von allen Instanzen gemeinsam genutzt

function SuperType() {
  this.property = true;
  this.arr=[1,2,3]
}
SuperType.prototype.getSuperValue = function() {
  return this.property;
}
function SubType() {
  this.sub = false;
}
SubType.prototype = new SuperType();
//继承SuperType,即以superType的实例为中介,使subType。prototype指向superType的原型
SubType.prototype.getSubValue = function() { //添加新方法
  return this.sub;
}
SubType.prototype.getSuperValue = function() { // 重写超类中的方法
  return this.sub;
}
var instance1 = new SubType();
instance1.arr.push(4);
console.log(instance1.arr); //1,2,3,4
var instance2 = new SubType();
console.log(instance2.arr); //1,2,3,4
Nach dem Login kopieren

2. Vererbung in js implementieren Methode: Konstruktor ausleihen

Implementierungsmethode: Rufen Sie den Konstruktor der Oberklasse innerhalb des Konstruktors der Unterklasse auf, dh verwenden Sie call() oder apply(), damit die Umfang der Konstruktoränderungen der Oberklasse

Sie können Parameter an den Konstruktor übergeben, aber Sie können keine Funktionen wiederverwenden

function SuperType(name,age){
  this.name = name;
  this.age = age;
}
function SubType() {
  SuperType.call(this,'i','21')//继承SuperType,并传递参数
  this.job = 'actor'
}
Nach dem Login kopieren

3. Die Art und Weise, wie js die Vererbung implementiert: 🎜>

Implementierungsmethode: Verwenden Sie die Prototypenkette, um die Vererbung von Prototypeigenschaften und -methoden zu realisieren, und leihen Sie sich den Konstruktor aus, um die Vererbung von Instanzeigenschaften zu realisieren

Versteckte Gefahr: Rufen Sie den Konstruktor der übergeordneten Klasse auf zweimal (1call()-Methode, 2new SuperType() )

function SuperType(name,age){
  this.name = name;
  this.age = age;
  this.f = [1,2,3,4]
}
SuperType.prototype.sayName = function() {
  console.log(this.name)
}
function SubType(name,age) {
  SuperType.call(this,name,age)//继承SuperType,并传递参数
  this.job = 'actor'
}
SubType.prototype=new SuperType();
SubType.prototype.constructor = SubType;
SubType.prototype.sayHello=function() {
  console.log('hello')
}

var h = new SubType('hua', 18);
h.sayName()//haha
h.f.push(5)
console.log(h.f)//1,2,3,4,5
var n = new SubType();
console.log(n.f)//1,2,3,4
Nach dem Login kopieren


4. Die Art und Weise, wie js die Vererbung implementiert: prototypische Vererbung

Basierend auf einem Objekt, generieren ein neues Objekt und ändern Sie dann das neue Objekt

Superklassen-Referenztypattribute werden weiterhin gemeinsam genutzt

var person = {
  name:'lily',
  age:'21',
  friends:[1,2,3]
}
var people = Object.create(person);
people.friends.push(4);
var human = Object.create(person);
console.log(human.friends)//1,2,3,4
Nach dem Login kopieren


5. Die Art und Weise, wie js die Vererbung implementiert: parasitäre Vererbung

Erstellung Eine Funktion, die nur dazu dient, den Vererbungsprozess zu implementieren, das Objekt innerhalb der Funktion zu erweitern und dann das Objekt zurückzugeben

Zu diesem Zeitpunkt wird das Referenztypattribut der übergeordneten Klasse noch gemeinsam genutzt von allen Instanzen

function anotherFunction(original) {
  var clone  = Object(original);
  clone.sayHi = function() {
    console.log('hi')
  }
  return clone;
}
var person = {
  name:'lili',
  age:'21',
  f: [1,2,3]
}
var people1 = anotherFunction(person);
people1.f.push(4)
console.log(people1.f);// 1,2,3,4
var people2 = anotherFunction(person);
console.log(people2.f);// 1,2,3,4
Nach dem Login kopieren


6. Die Art und Weise, wie js die Vererbung implementiert: parasitäre kombinierte Vererbung

Erbt Eigenschaften durch Ausleihen von Konstruktoren und erbt Methoden durch Prototypenkettenmischung

Reduziert eine übergeordnete Klasse. Während der Ausführung des Klassenkonstruktors werden die Attribute des Referenztyps der übergeordneten Klasse nicht gemeinsam genutzt.

function SuperType(name,age){
  this.name = name;
  this.age = age;
  this.f = [1,2,3,4]
}
SuperType.prototype.sayName = function() {
  console.log(this.name)
}
function SubType(name,age) {
  SuperType.call(this,name,age)
  this.job = 'actor'
}
function inherit(superType,subType) {
  var property =  Object.create(superType.property);// 创建父类原型的一个副本,并没有调用父类构造函数
  property.constructor = subType;// 使父类原型副本的constructor属性指向子类
  subType.property = property;// 子类的原型指向父类原型副本
}
inherit(SuperType,SubType)
var instance = new SubType('haha', 18);
instance.sayName()//haha
instance.f.push(5);
console.log(instance.f);//1,2,3,4,5
var ins = new SubType();
console.log(ins.f);//1,2,3,4
Nach dem Login kopieren
Verwandte Empfehlungen:

JS-Vererbung-- Prototypkettenvererbung und Klassenvererbung_Grundkenntnisse


Detaillierte Erläuterung der Vererbungsmethoden in JS


Mehrere Möglichkeiten zur Implementierung der Vererbung in JS

Das obige ist der detaillierte Inhalt vonWas sind die Vererbungsmethoden von js? Einführung in verschiedene Möglichkeiten zur Implementierung der Vererbung in js. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage