原型鏈和訪問對象原型的方法

大家好,我是IT修真院成都分院第09期學員,一枚正直純潔善良的web程序員。今天給大家分享一下,修真院官網js任務4,原型鏈和訪問對象原型的方法?

1.背景介紹

JavaScript 中,萬物皆對象。 JavaScript根據"原型鏈"(prototype chain)模式,來實現繼承。

二.知識剖析

1.? 對象:

JavaScript中,對象是有區別的,分為普通對象和函數對象。


o1 o2 o3 為普通對象,f1 f2 f3 為函數對象。

2.? 對象繼承

Brendan Eich參考C++和Java,做了簡化設計,將new命令引入JavaScript中,new后面跟對象的構造函數,用來創建對象。這樣做有個缺點:無法共享方法和屬性.。

Brendan Eich決定為構造函數設置一個prototype屬性。這個屬性包含一個對象,所有實例對象需要共享的屬性和方法,都放在這個對象里面;

那些不需要共享的屬性和方法,就放在構造函數里面。

實例對象一旦創建,將自動引用prototype的屬性和方法。也就是說,實例對象的屬性和方法,分成兩種,一種是本地的,另一種是引用的。

species屬性放在prototype對象里,是兩個實例對象共享的。只要修改了prototype對象,就會同時影響到兩個實例對象

DOG.prototype.species = '貓科';

console.log(dogA.species); // 貓科

console.log(dogB.species); // 貓科

由于所有的實例對象共享同一個prototype對象,那么從外界看起來,prototype對象就好像是實例對象的原型,而實例對象則好像"繼承"了prototype對象一樣。

3.? 原型prototype

在JavaScript 中,每當定義一個對象(函數)時候,對象中都會包含一些預定義的屬性。其中函數對象的一個屬性就是原型對象 prototype。普通對象沒有prototype,但有_ proto _屬性。


4.??原型鏈

JS在創建對象(不論是普通對象還是函數對象)的時候,都有一個叫做__proto__的內置屬性,用于指向創建它的函數對象的原型對象prototype。




5.??constructor屬性

prototype對象有一個constructor屬性,默認指向prototype對象所在的構造函數。

由于constructor屬性定義在prototype對象上面,意味著可以被所有實例對象繼承。

constructor屬性的作用,是分辨原型對象到底屬于哪個構造函數。

6.??總結

1.原型和原型鏈是JS實現繼承的一種模型。

2.原型鏈的形成是真正是靠__proto__ 而非prototype。

三.常見問題

訪問對象原型的方法有哪些?

四.解決方案

獲取實例對象obj的原型對象,有三種方法

1. obj.__proto__

2. obj.constructor.prototype

3. Object.getPrototypeOf(obj)

五.編碼實戰

六.擴展思考

1.Object.__proto__ === Function.prototype // true

2.Function.__proto__ === Function.prototype // true?

3.Function.prototype.__proto__=== Object.prototype //true

1.Object是函數對象,是通過new Function()創建,所以Object.__proto__指向Function.prototype。

2.Function 也是對象函數,也是通過new Function()創建,所以Function.__proto__指向Function.prototype。

3.Function.prototype是個函數對象,理論上其__proto__應該指向 Function.prototype,就是它自己,自己指向自己,沒有意義。函數對象也是對象,給它設定根指向Object.prototype,Object.prototype.__proto__=== null,保證原型鏈能夠正常結束。

7.參考文獻

參考一:阮一峰:Javascript繼承機制的設計思想

參考二:JavaScript原型及原型鏈詳解

8.更多討論

鳴謝

感謝 王蒙師兄,此教程是在他們之前技術分享的基礎上完善而成

感謝大家觀看

PPT鏈接

視頻鏈接

騰訊視頻:



原型鏈和訪問對象原型的方法

今天的分享就到這里啦,歡迎大家點贊、轉發、留言、拍磚~

我們下周再見!

------------------------------------------------------------------------------------------------------------------------

技能樹.IT修真院

“我們相信人人都可以成為一個工程師,現在開始,找個師兄,帶你入門,掌控自己學習的節奏,學習的路上不再迷茫”。

這里是技能樹.IT修真院,成千上萬的師兄在這里找到了自己的學習路線,學習透明化,成長可見化,師兄1對1免費指導。快來與我一起學習吧~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。