繼承---原型式繼承
原型式繼承並沒有使用嚴格意義上的建構函式,是通過借助原型基於已有的物件建立新物件,同時還不必建立自定義型別。
使用原型式繼承的主要思路如例1所示:
例1:
function object(o)
f.prototype=o;
return new f();}
將例1進行分析可知:在object函式的內部先建立了乙個臨時性的建構函式,然後將傳入的物件作為這個建構函式的原型,最
後返回了這個臨時型別的乙個新例項。 結合例1,並在其下方新增如下**1:
**1:
var person=
var anotherperson=object(person);
anotherperson.name="greg";
anotherperson.friends.push("aaa");
var yetanotherperson=object(person);
yetanotherperson.name="bob";
yetanotherperson.friends.push("000");
alert(person.friends);//111,222,333,aaa,000
克洛克福德主張這種原型式繼承,要求你必須有乙個物件可以作為另乙個物件的基礎。在**1中,可以作為另乙個物件
的基礎的是person物件,於是我們可以把它傳入到object()函式中,然後該函式就會返回乙個新物件,這個新物件是將person
作為原型。所以它的原型中就包含乙個基本型別值屬性和乙個引用型別值屬性。即是在person中,person.friends還會被
anotherperson和yetanotherperson共享。該方法相當於建立了兩個person物件的副本。
ecmascript5新增object.create( )方法規範了原型式繼承。該方法接收了兩個引數:乙個用作新物件原型的物件和(可選)乙個
為新物件定義額外屬性的物件。在傳入乙個引數的情況下,object.create( )和object( )方法的行為相同。如果傳入兩個引數,則
object.create( )的第二個引數與object.defineproperties( )方法的第二個引數的格式相同:每個屬性都是通過自己的描述符定義的。
以該方法指定的任何屬性都會覆蓋原型物件上的同名屬性。
原型式繼承
var person alert person.name li function create obj 建立空的建構函式 df.prototype obj 將引數物件的屬性方法賦給建構函式 return new df 返回該建構函式的例項物件 var man create person 試過直接將p...
js繼承之 原型式繼承
借助原型可以基於已有的物件建立新物件,同時還不必因此常見自定義型別。為了達到這個目的,他給出了如下函式 function object o f.prototype o return new f 在object 函式內部,先建立乙個臨時性的建構函式,然後將傳入的物件作為這個建構函式的原型,最後返回了這...
繼承方式四 原型式繼承
道格拉斯 克羅克福德在一篇文章中介紹了一種實現繼承的方法,這種方法並沒有使用嚴格意義上的建構函式。它的想法是借助原型可以基於已有的物件建立新物件,同時還不必因此建立自定義型別。為了達到這個目的,他給出了如下函式。function object o f prototype o return newf ...