既然要實現繼承,那麼首先我們得有乙個父類,**如下:
// 定義乙個動物類
function animal (name)
}// 原型方法
animal.prototype.eat = function(food) ;
核心: 將父類的例項作為子類的原型
function cat()
cat.prototype = new animal();
cat.prototype.name = 'cat';
// test code
var cat = new cat();
console.log(cat.name);
console.log(cat.eat('fish'));
console.log(cat.sleep());
console.log(cat instanceof animal); //true
console.log(cat instanceof cat); //true
特點:
非常純粹的繼承關係,例項是子類的例項,也是父類的例項
父類新增原型方法/原型屬性,子類都能訪問到
簡單,易於實現
缺點:要想為子類新增屬性和方法,必須要在new animal()
這樣的語句之後執行,不能放到構造器中
無法實現多繼承
來自原型物件的引用屬性是所有例項共享的(詳細請看附錄**: 示例1)
建立子類例項時,無法向父類建構函式傳參
推薦指數:★★(3、4兩大致命缺陷)
2017-8-17 10:21:43補充:感謝 mmhs
指出。缺點1中描述有誤:可以在cat建構函式中,為cat例項增加例項屬性。如果要新增原型屬性和方法,則必須放在new animal()
這樣的語句之後執行。
核心:使用父類的建構函式來增強子類例項,等於是複製父類的例項屬性給子類(沒用到原型)
function cat(name)
// test code
var cat = new cat();
console.log(cat.name);
console.log(cat.sleep());
console.log(cat instanceof animal); // false
console.log(cat instanceof cat); // true
特點:
建立子類例項時,可以向父類傳遞引數
可以實現多繼承(call多個父類物件)
缺點:例項並不是父類的例項,只是子類的例項
只能繼承父類的例項屬性和方法,不能繼承原型屬性/方法
無法實現函式復用,每個子類都有父類例項函式的副本,影響效能
推薦指數:★★(缺點3)
核心:為父類例項新增新特性,作為子類例項返回
function cat(name)
// test code
var cat = new cat();
console.log(cat.name);
console.log(cat.sleep());
console.log(cat instanceof animal); // true
console.log(cat instanceof cat); // false
特點:
不限制呼叫方式,不管是new 子類()
還是子類()
,返回的物件具有相同的效果
缺點:例項是父類的例項,不是子類的例項
不支援多繼承
推薦指數:★★
JS繼承的實現方式
前言 js作為物件導向的弱型別語言,繼承也是其非常強大的特性之一。那麼如何在js中實現繼承呢?讓我們拭目以待。既然要實現繼承,那麼首先我們得有乙個父類,如下 定義乙個動物類 function animal name 原型方法 animal.prototype.eat function food 核心...
JS繼承的實現方式
前言 js作為物件導向的弱型別語言,繼承也是其非常強大的特性之一。那麼如何在js中實現繼承呢?讓我們拭目以待。既然要實現繼承,那麼首先我們得有乙個父類,如下 定義乙個動物類 function animal name 原型方法 animal.prototype.eat function food 核心...
Js繼承的實現方式
繼承是物件導向軟體技術當中的乙個概念,與多型 封裝共為物件導向的三個基本特徵。繼承可以使得子類具有父類的屬性和方法或者重新定義 追加屬性和方法等。通過將子類的原型物件指向父類的例項,實現繼承訪問父類屬性方法等。定義父類 function parent 定義子類 function child chil...