ES 5/ES 6対象継承の実現
2290 ワード
対象に向けてカプセル化、継承、多形の3つの特性があることはよく知られています.JavaScriptでも同様です.対象となる参加例を通じて工場化生産を実現することは多くの資源を節約できます.
ES 6対象継承の実現
エス6の新しい文法classを通じてオブジェクトを作成し、extensは継承を実現します.
ES 5原型オブジェクトによる継承が可能です.
コンストラクタによってプロトタイプ、コンストラクタがプロトタイプの指向を変えて継承を実現します.
ES 6対象継承の実現
エス6の新しい文法classを通じてオブジェクトを作成し、extensは継承を実現します.
// Car
class Car{
constructor(name,type){//Car
this.name = name;
this.type = type;
}
// Car
talk(){
return this.name+" "+this.type
}
}
class smallCar extends Car{// smallCar Car
constructor(name,type){
//
super(name,type);
}
}
// bmw
var bmw = new smallCar(" X5","suv");
// bmw
console.log(bmw.name);//" X5"
console.log(bmw.type);//"suv"
console.log(bmw.talk());//" X5 suv"
上記の例では、ClassによってCas類のオブジェクトを生成し、small Cas類extens関数によってCas類の共有属性と方法を継承し、super()方法によってsmall Casのインスタンスの各属性値を伝達し、属性値がない場合にはsuper()方法を必要とし、super()方法とextens)方法とは相補的に切り離せない.ES 5原型オブジェクトによる継承が可能です.
コンストラクタによってプロトタイプ、コンストラクタがプロトタイプの指向を変えて継承を実現します.
//1.
function Father(name,age) {
//
this.name = name;
this.age = age;
}
//2. talk
Father.prototype.talk = function () {
return " "+this.name+", "+this.age+" !"
}
//3.
function Son(name,age) {
//3.1 call this ,
// this super()
Father.call(this,name,age);
}
//4.
// __proto__ Father Son.prototype
// constructor prototype
Son.prototype = new Father();
console.log(Son.prototype.constructor);// Father Son
//5.
Son.prototype.constructor = Son;
//6. Son
var son = new Son(" ","5")
console.log(son.name);//
console.log(son.age);//5
console.log(son.talk());// , 5 !
//
ES 5では対象継承が難しく、サブプロトタイプのthisオブジェクトをcall()で伝えることで属性を継承する必要があります.親のプロトタイプのオブジェクトをサブプロトタイプのオブジェクトに上書きして継承する方法ですが、親のプロトタイプのオブジェクトはサブプロトタイプのオブジェクトのconstructor属性と一緒ですので、サブプロトタイプのオブジェクトの指向を変更する必要があります.ES 6は、クラスとSurperによってこれらの指向問題を解決し、より簡単に使用します.