- 對於初學這來說,掌握對象的繼承方式是必修課,今天就在這裏給大家總結下對象的幾種繼承方式。
- 在學習對象的繼承方式之前,需要了解什麼是原型及原型鏈的概念,不知道的話先去惡補下吧。
- js並不是一門面向對象的語言,沒有類class的概念,在js中使用構造方法代替類class,實現模擬面向的對象編程方式。
第一種方式-----原型鏈繼承
原型鏈繼承:子構造方法的原型指向父構造方法的實例。
//聲明父級構造函數
function Parent(name){
this.name = name;
}
//添加父級構造方法的原型屬性
Parent.prototype.age = 18;
//實例化父級對象
var p = new Parent("小明");
//聲明子級構造函數
function Son(){}
//將子級的構造函數的原型指向父級的實例
Son.prototype = p;
//創建子級的實例對象
var s = new Son();
//測試
console.log(s.name)//小明
console.log(s.age)//18
缺點:父級在實例化過程中必須傳入參數,這樣子級得到的屬性值是確定的,得到的結果如不是自己想要的,還要手動更改。
第二種繼承方式:借用構造函數
//聲明父級構造函數
function Parent(name){
this.name = name;
}
//聲明子級構造函數
function Son(name){
Parent.call(this,name)
}
//創建子級的實例對象
var s = new Son("小明");
//測試
console.log(s.name)//小明
優點:這種方式可以根據需求傳入值,以得到不同的屬性值
缺點:因爲只是借用了父級的構造方法,給實例對象添加屬性。並不能繼承父級原型中的屬性。
第三種方式:聖盃模式--結合原型鏈和借用構造函數
將需要傳入參數,初始化的對象屬性,通過借用構造方法繼承.不需要初始化的屬性,放在父構造函數的原型中,通過原型鏈繼承.
//聲明父級構造函數
function Parent(name){
this.name = name;
}
//添加父級構造方法的原型屬性
Parent.prototype.age = 18;
//實例化父級對象----不傳入參數
var p = new Parent();
//聲明子級構造函數
function Son(name){
//借用父級構造函數
Parent.call(this,name);
}
//將子級的構造函數的原型指向父級的實例
Son.prototype = p;
//創建子級的實例對象
var s = new Son("小明");
//測試
console.log(s.name)//小明
console.log(s.age)//18
完美實現初始化實例屬性,繼承所有數據。