繼承的幾種方式,怎麼做
阿新 • • 發佈:2021-10-08
[丁大爺的部落格](https://dingshiyi.top./detail/77#_102)
盯著目標就是幹!!!!!
經典、原型、寄生、組合、寄生組合
經典:在子類建構函式中呼叫父類建構函式
//es5
function A() {
this.color = ['red']
}
function B(name) {
A.call(this)
this.name = name
}
//面向物件
class A {
constructor() {
}
}
class B extends A {
constructor() {
super()
}
}
原型:ES5通過新增Object.create()方法原型式繼承的概率規範化了,在裡面建立一個原型,然後在原型上新增屬性,最後返回一個原型的例項
function obj(p) {
function F() {}
F.prototype = p
return new F()
}
let p1 = obj()
//es5
let p2 = Object.create()
寄生:在裡面建立一個物件,然後在該物件上新增屬性,最後返回該物件
function other(original) { const clone = Object.create(original); //原型繼承 clone.say = function () { console.log("say Hi"); }; return clone; }
組合:將經典和原型鏈組合在一起
function Person() { this.name = "人類"; } Person.prototype.run = function () { console.log("人類跑步"); }; function Robot(name) { //通過經典繼承的方式繼承父類例項的屬性 Person.call(this); this.name = name; } //通過原型鏈來繼承原型上的方法和屬性 Robot.prototype = new Person();
寄生組合:
function usefulFunction(Father, Son) {
//這裡借用寄生式
function F() {}
F.prototype = Father.prototype;
//這裡借用組合式
const p = new F();
p.constructor = Son;
Son.prototype = p;
}