關於原型鏈我的理解是乙個建構函式的原型作為另乙個建構函式的例項形成的繼承關係
在js高階程式設計中有這樣乙個圖
當我們定義乙個函式時會有乙個原型,即圖中的supertype prototype,這時原型物件中會有乙個constructor指向建構函式supertype,這便是建構函式與原型物件之間的關係;
function
super
()
此時如果再定義乙個subtype建構函式,把subtype prototype作為建構函式supertype的例項,便會有[[prototype]]指向supertype prototype這樣便形成了原型鏈,注意subtype prototype已經沒有constructor
function
super
()function
person
(){};
person.prototype = new super();
原型鏈中的繼承上面**中person建構函式和prototype裡什麼也沒定義,但是我們現在對person進行例項,事實上我們是可以取到值的
var person =
new person();
console.
log(person.name); //'bob'
console.
log(person.age); //20
通過chrome控制台的列印我們可以發現這種繼承關係,__prototo__:super
由person.prototype = new super();
存在super中的屬性;
constructor指向變化
js高階程式設計說如果乙個建構函式的原型物件作為另乙個建構函式的例項,那麼作為例項的原型物件的constructor就會消失,從上圖中我們也能發現綠色框中沒有constructor屬性,這裡當時我在想如果直接手動將constructor指為person這個建構函式原型鏈是否會斷裂
function
super
()function
person
(){};
person.prototype = new super();
person.prototype.constructor = person;
console.log(person.prototype);
var person=new person();
console.log(person);
通過在控制台中列印可以發現constructor這裡只作為乙個屬性,值為person這個建構函式,而真正的影響指向的constructor為灰色
因此可以推斷不存在手動更改constructor指向這麼一說
js 原型 原型鏈理解
執行發現如下 自定義乙個函式,函式包含兩個關鍵資料 prototype,proto 1 原型 prototype person具有prototype屬性 包含我們定義的屬性name,age以及constructor,並且constructor指向我們的person函式,可以理解為prototype就...
js理解原型高程的一些筆記
在js中建立的每個函式都有乙個 prototype 原型屬性,這個屬性是乙個物件。按字面意思,prototype是通過呼叫構造方法而建立的那個物件的原型物件。原型模式 function person person.prototype.name mike person.prototype.age 21...
js原型鏈理解
關於原型鏈的問題也是領悟了很久,有時候突然覺得什麼都懂了,但下乙個問題出現令人一臉蒙比,好像又什麼都不懂,這是最近的一點經驗,記下來方便以後複習。先貼上最經典的原型煉圖,說實話,這圖是真的很精髓了 首先我們要知道這句話 js中所有的東西 當然都是物件 都有 proto 所有的函式除了有 proto ...