Heim > Web-Frontend > js-Tutorial > Was sind die Vererbungsmethoden in js?

Was sind die Vererbungsmethoden in js?

亚连
Freigeben: 2018-05-17 10:30:11
Original
1649 Leute haben es durchsucht

Das offiziell veröffentlichte ES6 hat VererbungForm gekapselt und implementiert, Klasse Erweitert, hier wird hauptsächlich die Prototypenvererbung und -ausleihe von js aufgezeichnetKonstruktorGeerbt

Eins, Prototypkettenvererbung

function Super(){
    this.name="小明";
}
Super.prototype.sayName = function(){
    alert(this.name)
};function Sub(){}
Sub.prototype = new Super();var instance = new Sub();
instance.sayName();//小明1234567891011
Nach dem Login kopieren

Prototyp-Kettenvererbungsproblem

//Wenn die Superklasse Referenztypattributwerte enthält, in mehreren Instanzen einer der Unterklassen, solange ein Instanzreferenzattribut vorhanden ist Nur einmal geändert, ändert sich auch der Referenztypattributwert anderer Instanzen sofort // Der Grund dafür ist, dass das Superklassenattribut zum Prototypattribut der Unterklassenfunktion Super(){this.name=" Xiao Ming"; friends = ['Xiaohong','Xiaoqiang'];
}

Super.prototype.sayName = function(){
    alert(this.name)
};function Sub(){}
Sub.prototype = new Super();var instance1 = new Sub();var instance2 = new Sub();
instance1.friends.push('张三');
console.log(instance1.friends);//["小红", "小强", "张三"]console.log(instance2.friends);//["小红", "小强", "张三"]1234567891011121314151617
Nach dem Login kopieren

2. Konstruktorvererbung ausleihen

function Super(){this.name="小明";    this.friends = ['小红','小强'];
}
Super.prototype.sayName = function(){
    alert(this.name)
};function Sub(){
    Super.call(this);
}var instance1 = new Sub();var instance2 = new Sub();
instance1.friends.push('张三');
console.log(instance1.friends);//["小红", "小强", "张三"]console.log(instance2.friends);//["小红", "小强"]12345678910111213141516
Nach dem Login kopieren

Probleme beim Ausleihen Konstruktoren

Die Verwendung des geliehenen Konstruktors allein kann den Prototyp nicht erbenEigenschaften und Methoden in der Superklasse

3. Kombinierte Vererbung (Prototypvererbung + geliehen Konstruktor-Vererbung)

Kombinierte Vererbung ist auch die am häufigsten verwendete Vererbungsmethode in der tatsächlichen Entwicklung

function Super(){this.name="小明";    this.friends = ['小红','小强'];
}
Super.prototype.sayName = function(){
    alert(this.name)
};function Sub(){
    Super.call(this);
}
Sub.prototype = new Super();var instance1 = new Sub();var instance2 = new Sub();
instance1.friends.push('张三');
console.log(instance1.friends);//["小红", "小强", "张三"]console.log(instance2.friends);//["小红", "小强"]instance1.sayName();//小明instance2.sayName();//小明12345678910111213141516171819
Nach dem Login kopieren

Probleme mit kombinierter Vererbung

//组合式继承中,超类的构造函数将被调用两次function Super(){this.name="小明";    this.friends = ['小红','小强'];
}
Super.prototype.sayName = function(){
    alert(this.name)
};function Sub(){
    Super.call(this);//第二次调用}
Sub.prototype = new Super();//第一次调用var instance = new Sub();1234567891011121314
Nach dem Login kopieren

4. Parasitäre Vererbung

//Wenn das Objekt hauptsächlich berücksichtigt wird, anstatt Typen und Konstruktoren selbst zu definieren, ist parasitäre Vererbung ein nützliches Muster, aber es kann keine Funktion wiederverwenden

createAnother(original){
    var clone = Object(original);//创建一个新对象,original的副本
    clone.sayName = function(){ //对象的增强,添加额外的方法
        alert('hi');
    }    
return
 clone;
}var person = {
    name:'小明',
    friends:['小红','小强']
}var person1 = createAnother(person);var person2 = createAnother(person);
person1.friends.push('张三');
console.log(person.friends);//["小红", "小强", "张三"]console.log(person1.friends);//["小红", "小强", "张三"]console.log(person2.friends);//["小红", "小强", "张三"]123456789101112131415161718
Nach dem Login kopieren

Parasitäre kombinierte Vererbung

//寄生组合式继承解决了组合式继承调用两次超类构造函数的问题function inheritPrototype(sub,superr){var prototype = Object.create(superr.prototype);//ES5中
创建对象
副本的方法
    prototype.constructor = superr; //弥补重写原型失去的默认constructor属性
    sub.prototype = prototype;
}function Super(name){
    this.name = name;    this.friends = ['小红','小强'];
}
Super.prototype.sayName = function(){
    alert(this.name);
}function Sub(name){
    Super.call(this,name);
}
inheritPrototype(Sub,Super);var person1 = new Sub('小明');var person2 = new Sub('小华');
person1.friends.push('张三');
console.log(person1.friends);//["小红", "小强", "张三"]console.log(person2.friends);//["小红", "小强"]console.log(person1.sayName());//小明console.log(person2.sayName());//小华
Nach dem Login kopieren

Die oben genannten sind einige Vererbungsmethoden in js, die ich für Sie zusammengestellt habe. Ich hoffe, dass sie in Zukunft für alle hilfreich sein werden.

Verwandte Artikel:

Spezifische Schritte zum Übergeben von zwei Parametern an die JS-Methode in JS onclick

JS Basic Syntax Ausführliche Antwort

Erklärung der Methode zum Definieren von Klassen in JS

Das obige ist der detaillierte Inhalt vonWas sind die Vererbungsmethoden 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