js實現繼承的幾種方式

2021-09-19 08:23:40 字數 3447 閱讀 8424

前言:大多oo語言都支援兩種繼承方式:介面繼承和實現繼承,而ecmascript中無法實現介面繼承,ecmascript只支援實現繼承,而且其實現繼承主要是依靠原型鏈來實現。

基本思想:利用原型讓乙個引用型別繼承另外乙個引用型別的屬性和方法。

建構函式,原型,例項之間的關係:每個建構函式都有乙個原型物件,原型物件包含乙個指向建構函式的指標,而例項都包含乙個指向原型物件的內部指標。

原型鏈實現繼承例子:

function supertype() 

supertype.prototype.getsupervalue = function()

function subtype()

//繼承了supertype

subtype.prototype = new supertype();

subtype.prototype.getsubvalue = function ()

var instance = new subtype();

console.log(instance.getsupervalue());//true

例子:

function supertype() 

function subtype()

var instance1 = new subtype();

instance1.colors.push("black");

console.log(instance1.colors);//"red","blue","green","black"

var instance2 = new subtype();

console.log(instance2.colors);//"red","blue","green"

基本思想:將原型鏈和借用建構函式的技術組合在一塊,從而發揮兩者之長的一種繼承模式。

例子:

function supertype(name) 

supertype.prototype.sayname = function()

function subtype(name, age)

//繼承方法

subtype.prototype = new supertype();

subtype.prototype.constructor = subtype;

subtype.prototype.sayage = function()

var instance1 = new subtype("evanchen",18);

instance1.colors.push("black");

consol.log(instance1.colors);//"red","blue","green","black"

instance1.sayname();//"evanchen"

instance1.sayage();//18

var instance2 = new subtype("evanchen666",20);

console.log(instance2.colors);//"red","blue","green"

instance2.sayname();//"evanchen666"

instance2.sayage();//20

基本想法:借助原型可以基於已有的物件建立新物件,同時還不必須因此建立自定義的型別。

原型式繼承的思想可用以下函式來說明:

function object(o) 

f.prototype = o;

return new f();

}

例子:

var person = ;

var anotherperson = object(person);

anotherperson.name = "greg";

anotherperson.friends.push("rob");

var yetanotherperson = object(person);

yetanotherperson.name = "linda";

yetanotherperson.friends.push("barbie");

console.log(person.friends);//"shelby","court","van","rob","barbie"

ecmascript5通過新增object.create()方法規範化了原型式繼承,這個方法接收兩個引數:乙個用作新物件原型的物件和乙個作為新物件定義額外屬性的物件。

var person = ;

var anotherperson = object.create(person);

anotherperson.name = "greg";

anotherperson.friends.push("rob");

var yetanotherperson = object.create(person);

yetanotherperson.name = "linda";

yetanotherperson.friends.push("barbie");

console.log(person.friends);//"shelby","court","van","rob","barbie"

基本思想:建立乙個僅用於封裝繼承過程的函式,該函式在內部以某種方式來增強物件,最後再像真正是它做了所有工作一樣返回物件。

例子:

function createanother(original) ;

return clone;

}var person = ;

var anotherperson = createanother(person);

anotherperson.sayhi();///"hi"

基本思想:通過借用函式來繼承屬性,通過原型鏈的混成形式來繼承方法

其基本模型如下所示:

function inheritproperty(subtype, supertype)
例子:

function supertype(name)

supertype.prototype.sayname = function ();

function subtype(name,age)

inheritproperty(subtype,supertype);

subtype.prototype.sayage = function()

js實現繼承的幾種方式

一,js中物件繼承 js中有三種繼承方式 1.js原型 prototype 實現繼承 複製 如下 2.建構函式實現繼承 複製 如下 複製 如下 js手冊中對call的解釋 複製 如下 call 方法 呼叫乙個物件的乙個方法,以另乙個物件替換當前物件。call thisobj arg1 arg2 ar...

JS實現繼承的幾種方式

取自 1.js實現繼承的幾種方式 2.js 物件導向之繼承 多種組合繼承 js作為物件導向的弱型別語言,繼承也是其非常強大的特性之一。那麼如何在js中實現繼承呢?讓我們拭目以待。既然要實現繼承,那麼首先我們得有乙個父類,如下 定義乙個動物類 function animal name 原型方法 ani...

JS實現繼承的幾種方式

前言 js作為物件導向的弱型別語言,繼承也是其非常強大的特性之一。那麼如何在js中實現繼承呢?讓我們拭目以待。既然要實現繼承,那麼首先我們得有乙個父類,如下 定義乙個動物類 function animal name 原型方法 animal.prototype.eat function food 核心...