本篇文章將為你介紹JavaScript中繼承的幾種實作方式,希望看完這篇文章後,各位對JavaScript的繼承有一定的了解!
JavaScript中繼承的幾種實作方式
繼承
##想要實作繼承,首先就得有個父類別(建構子)來提供屬性和方法。function Father(name){ this.name=name //父类构造函数中的属性 } Father.prototype.age='40' //父类原型中的属性
1、借用建構子繼承
var Son=function(){ Father.call(this,...arguments) this.age=10 } var son=new Son('小明') console.log(son) //{name: "小明", age: 10}
console.log(son instanceof Father) //false
2、透過原型鏈繼承
var Son=function(name){ this.sonName=name } Son.prototype=new Father() var xiaoming=new Son('小明') console.log(xiaoming) //{sonName:'小明'} console.log(xiaoming.__proto__==Son.prototype) //true console.log(xiaoming.__proto__.__proto__==Father.prototype) //true console.log(xiaoming.age) //40 通过原型链查找
3、組合繼承(組合原型鏈繼承與借用建構子繼承)
var Son=function(){ Father.call(this,...arguments) } Son.prototype=new Father() var son=new Son('小明') console.log(son) //{name:'小明'} console.log(son.age) //40
4、拷貝繼承
透過for…in,把父類別物件和原型物件上可枚舉的屬性和方法循環賦值到Son的原型上function Son(name){ var father=new Father() for(let i in father){ console.log(father[i]) Son.prototype[i]=father[i] } Son.prototype.name=name } var son=new Son('leo') console.log(son)
5、原型式繼承
採用原型式繼承並不需要定義一個類,傳入參數obj,產生一個繼承obj物件的物件。類似於複製一個對象,用函數包裝。但它不是類別繼承,而是原型式基礎,缺乏了類別的概念。function ObjectCreate(obj){ //这个方法的原理就是Object.create() function F(){} F.prototype=obj return new F() } var Son=new Father('son'); var son=ObjectCreate(Son) var objson=Object.create(Son); console.log(son.name) //son console.log(objson.name) //son console.log(son.__proto__==Son) //true
6、寄生式繼承
建立一個僅用於封裝繼承過程的函數,然後在內部以某種方式增強對象,最後返回物件function ObjectCreate(obj){ function F(){} F.prototype=obj return new F() } var Son=new Father(); function subObject(obj){ var sub=ObjectCreate(obj) sub.name='son' return sub } var son=subObject(Son) console.log(son.name) //son
7、寄生組合式繼承
結合寄生式繼承和組合式繼承,完美實作不帶兩份超類別屬性的繼承方式,但太過繁雜,感覺不如組合式繼承。function ObjectCreate(obj){ function F(){} F.prototype=obj return new F() } var middle=ObjectCreate(Father.prototype) //middle的原型继承了父类函数的原型 function Son(){ Father.call(this,...arguments) } Son.prototype=middle; middle.construtor=Son; //修复实例 var son=new Son('son'); console.log(son) //{name:'son'}
js教學 欄目,歡迎學習!
以上是JavaScript中繼承的幾種實作方式的詳細內容。更多資訊請關注PHP中文網其他相關文章!