深入理解原型鏈的本質

2021-07-14 04:34:10 字數 1083 閱讀 5548

原型鏈是作為實現繼承的主要方法,基本思想是利用原型讓乙個引用型別繼承另乙個引用型別的屬性和方法。

實現原型鏈的**如下:

function

super

() super.prototype.getsupervalue = function

() ;

function

sub()

//繼承了super

sub.prototype = new super();

sub.prototype.getsubvalue = function

() ;

var instance = new sub();

alert(instance.getsupervalue()); //true

例項以及建構函式和原型之間的關係如下如:

上面的**中,沒有使用sub預設的原型,而是給它換了個新原型,就是super的例項。新原型不僅具有作為乙個super的例項所擁有的全部屬性和方法,而且其內部還有乙個指標,指向了super的原型。最終的結果就是:instance指向sub的原型,sub的原型又指向super的原型。getsupervalue()方法仍然還在super.prototype中,但property則位於sub.prototype中。這是因為property是乙個例項屬性,而getsupervalue()則是乙個原型方法。既然sub.prototype現在是super的例項,那麼property當然就位於該例項中。要注意instance.constructor現在指向的是super,這是因為sub.prototype中的constructor被重寫了。

由於所有引用型別預設都繼承了object,因此如下圖:

一句話:sub繼承了super,super繼承了object,呼叫instance.tostring實際上呼叫的是儲存在object.prototype中的方法

深入理解JavaScript的原型 原型鏈與繼承

在介紹原型是什麼之前,首先需要知道原型是做什麼用的,在js高設書中,明顯可以看到介紹有關原型的知識是在介紹建立物件的方式時提出來的,即使用原型模式來建立物件,顯而易見,原型這個概念是與建立物件聯絡在一起的。當然,建立物件的方式有很多種,如工廠模式,建構函式模式,以及與原型模式有關的其他模式等。我們建...

深入理解JS instanceof和原型鏈

又介紹乙個老朋友 instanceof。對於值型別,你可以通過typeof判斷,string number boolean都很清楚,但是typeof在判斷到引用型別的時候,返回值只有object function,你不知道它到底是乙個object物件,還是陣列,還是new number等等。這個時候...

深入理解原型

functiona var b console.log a.constructor console.log b.constructor var a new a a.prototype var b new a console.log a.constructor console.log b.constr...