前言:大多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();
}
ecmascript5通過新增object.create()方法規範化了原型式繼承,這個方法接收兩個引數:乙個用作新物件原型的物件和乙個作為新物件定義額外屬性的物件。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"
基本思想:建立乙個僅用於封裝繼承過程的函式,該函式在內部以某種方式來增強物件,最後再像真正是它做了所有工作一樣返回物件。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 核心...