JavaScript 繼承 原型式繼承

2021-08-13 22:56:43 字數 1261 閱讀 5824

繼承---原型式繼承

原型式繼承並沒有使用嚴格意義上的建構函式,是通過借助原型基於已有的物件建立新物件,同時還不必建立自定義型別。

使用原型式繼承的主要思路如例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 ...