一. 原型鏈繼承
function
parent(){};
function
son(){};
son.prototype = new parent();
原理: 子類的原型物件指向父類的例項。
缺點: 1. 子類例項共享子類原型物件的引用屬性。
2.建立子類的時候不能向父類建構函式傳參。
二. 建構函式繼承
function
parent(){}
function
son(name)
原理: 單純的使用call將父類的this指向子類,執行父類建構函式。
缺點: 1. 子類的例項無法實現公共屬性(功能函式)的復用,造成記憶體浪費。
三. 組合繼承(原型鏈繼承+建構函式繼承)
function
parent(){}
function
son(name)
son.prototype = new parent(); // 原型鏈繼承
son.prototype.constructor = son;
原理: 通過call呼叫父類建構函式,實現建構函式的繼承;通過將子類的原型物件指向父類的例項,實現原型鏈繼承。
缺點: 1. 父類被呼叫了兩次,導致子類例項上有一層屬性,而原型物件上也有一層屬性,子類例項上的屬性遮蔽了其
原型上的屬性。 複製**
四. 寄生組合繼承(解決了組合繼承中原型中多乙份屬性的缺點)
function
getprototype(obj) ;
f.prototype = obj;
return
new f();
}function
parent(){}
function
son(name)
var prototypeobj = getprototype(parent.prototype); // 生成乙個obj;
son.prototype = prototypeobj; // 將son的原型物件指向上述的obj物件。
son.prototype.constructor = son;
或者function
parent(){}
function
son(name)
son.prototype = object.create(parent.prototype);
son.prototype.constructor = son;
複製**
JS 繼承方式
原型鏈繼承 所謂原型鏈繼承,就是根據js原型鏈的特性而實現的一種繼承方式。原型鏈特性 每個函式都自帶有乙個prototype屬性指向該函式對應的原型物件,而原型物件又會有乙個屬性指向該函式。而通過new 建構函式出來的例項,會有乙個屬性指向原型物件。1 原型鏈繼承 2 function supert...
js 繼承方式
父類 定義乙個動物類 function animal name 原型方法 animal.prototype.eat function food 1.原型繼承 核心 將父類的例項作為子類的原型 function cat cat.prototype new animal cat.prototype.na...
JS繼承方式
1.原型鏈繼承 子類的原型是父類的乙個例項物件。優點 父類新增原型屬性或者原型方法,子類都能夠訪問到 簡單容易實現。缺點 原型物件的所有屬性被所有例項共享 無法實現多繼承 建立子類例項時不能向父類建構函式傳參 新增子類原型或方法,必須在語句student.prototype new people 之...