JS原型的動態性

2022-02-08 03:35:39 字數 1050 閱讀 5997

由於在原型中查詢成員的過程是一次搜尋,所以我們對原型物件所做的任何修改都能立即從例項上反映出來(但不包括對原型物件的重寫,下面會介紹到),即使是對原型的修改操作在建立例項之後。

如下面的示例所示:

function wede(){}

wede.prototype.name="wede's name"; //"wede's name"

//建立例項

var person=new wede();

//這時候的name屬性是共享原型物件上的name屬性

person.name; //"wede's name"

//下面對原型物件成員的修改

wede.prototype.name="wede.zhao";

//再次輸出,發現已經是更新後的值

person.name; //"wede.zhao"

以上的結果和我們預料中的一樣;

但是如果是利用物件字面量方式重寫原型物件,那麼情況就不一樣了;

如下面的**所示:

function mywede(){}

mywede.prototype.name="wei"; //"wei"

var my1=new mywede();

my1.name; //"wei"

//這裡重寫原型物件。注意:這時候改變了原型物件的構造器constructor(指向了object,而不是之前的mywede)

mywede.prototype=; //object

//這裡比較和上面的不同,可以看出,重寫了原型物件後,之前建立的例項的[[prototype]]內部屬性(即指向建構函式的原型物件的指標)仍然指向的是最初的原型物件。

my1.name; //"wei"

//再次建立新的例項

//這時候新例項的[[prototype]]指向的是重寫後的原型物件了

var my2=new mywede();

//輸出的結果證明了這一點:

my2.name; //"zhao wei"

JS原型的動態性及例項與原型的關係

今天再讀了 js高程 的第六章,有了些深入的感悟和理解,總結分享一下。建立物件的方式有很多,有一種是動態原型模式,最實用的是建構函式與原型組合的模式,原型的動態性在這兩個模式裡都有所體現,我本人的理解是 前者的 動態 是通過一些判斷,看方法是否存在來決定是否對原型進行初始化,同時,在建構函式內部對原...

簡單原型語法和原型動態性

function student student.prototype 簡單原型寫法本質上完全重寫了預設的prototype物件,因此construtor屬性也就變成了新物件的constructor屬性,指向了object建構函式,不再指向student函式。通過constructor已經無法確定物件...

JS 物件 JS原型 原型鏈

參考學習 js物件 構造器函式 建立物件的函式。物件分為普通物件和函式物件。所有物件都有 proto 屬性 函式物件不止有 proto 屬性,還有prototype屬性 稱為原型物件 1.new function 產生的物件都是函式物件。2.所有函式物件的 proto 都指向function.pro...