繼承的幾種方式

2021-10-01 03:37:11 字數 1840 閱讀 2429

繼承的幾種方式封裝

定義乙個動物類

function animal (name)

}原型方法

animal.prototype.eat = function(food) ;

原型鏈繼承

核心: 將父類的例項作為子類的原型

function cat()

cat.prototype = new animal();

cat.prototype.name = 『cat』;

var cat = new cat();

console.log(cat.name);

console.log(cat.eat(『fish』));

console.log(cat.sleep());

console.log(cat instanceof animal);

console.log(cat instanceof cat);

構造繼承

核心:使用父類的建構函式來增強子類例項,等於是複製父類的例項屬性給子類(沒用到原型)

function cat(name)

var cat = new cat();

console.log(cat.name);

console.log(cat.sleep());

console.log(cat instanceof animal);

console.log(cat instanceof cat);

例項繼承

核心:為父類例項新增新特性,作為子類例項返回

function cat(name)

// test code

var cat = new cat();

console.log(cat.name);

console.log(cat.sleep());

console.log(cat instanceof animal);

console.log(cat instanceof cat);

拷貝繼承

function cat(name)

cat.prototype.name = name || 『tom』;

}var cat = new cat();

console.log(cat.name);

console.log(cat.sleep());

console.log(cat instanceof animal);

console.log(cat instanceof cat);

組合繼承

核心:通過呼叫父類構造,繼承父類的屬性並保留傳參的優點,然後通過將父類例項作為子類原型,實現函式復用

function cat(name)

cat.prototype = new animal();

呼叫了兩次父類建構函式,生成了兩份例項(子類例項將子類原型上的那份遮蔽了)

寄生組合繼承

核心:通過寄生方式,砍掉父類的例項屬性,這樣,在呼叫兩次父類的構造的時候,就不會初始化兩次例項方法/屬性,避免的組合繼承的缺點

function cat(name)

(function();

super.prototype = animal.prototype;

//將例項作為子類的原型

cat.prototype = new super();

})();

var cat = new cat();

console.log(cat.name);

console.log(cat.sleep());

console.log(cat instanceof animal);

console.log(cat instanceof cat);

繼承的幾種方式

一.拷貝繼承 通用型的 有new或沒有new的時候都可以 拷貝繼承 屬性通過 父構造器.call this 來繼承屬性。方法通過 for in 來講乙個父 prototype 的屬性傳遞給子 prototype 如下圖 2原型繼承 適合無new的物件 3 類式繼承 bbb.prototype new...

幾種js的繼承方式

1 繼承第一種方式 物件冒充 function super username function sub username var supernew new super super var subnew new sub sub supernew.hello subnew.hello subnew.wo...

js的幾種繼承方式

方式一 原型鏈繼承 function parent parent.prototype.getparentname function 子類 function child 下面這步實現繼承,這步需要放在getchildname 之前,不然獲得子類方法無法使用 child.prototype new pa...