摘要:開局先上一張圖分清楚函數與對象得到結論對象都有這個屬性但是只有函數對象才有這個屬性。所有的原型對象都有屬性,該屬性對應創建所有指向該原型的實例的構造函數。原型鏈的頂端是。的原型鏈的上一個節點是本身這個很奇怪哎。
開局先上一張圖、分清楚函數與對象:
得到結論:對象都有_proto_這個屬性,但是只有函數對象才有prototype這個屬性。
得出上面結論后我們再上一張圖、我們對話題研究都是基于這張圖:
根據上圖,自己些代碼論證一下得出一下結論: const Foo =function(){}; const Foo_prototype = Foo.prototype; const f1 = new Foo(); Foo.prototype == Foo.prototype //true Foo_prototype.constructor == Foo //true //1得出結論,Foo是一個函數對象,Foo的原型Foo_prototype的構造函數就是Foo本身 f1.__proto__ == Foo.prototype // true //2得出結論,foo的實例指向f1的原型鏈上一個節點也就是Foo的原型 Foo_prototype.__proto__ == Object;//true //3得出結論,Foo原型指向Foo的上一個原型節點 const Object_prototype = Object.prototype; Object_prototype.__proto__ == null//true //4得出結論,Object的原型鏈上一個節點是null,這也就是萬物皆對象,null中生對象 const Function_prototype = Function.prototype; Object.__proto__ == Function_prototype//true //5得出結論,原生對象指向Function的原型, Function.__proto__ == Function_prototype;//true //6得出結論,Function的原型鏈的上一個節點是Function本身 Foo.__proto__ == Function_prototype//true //7得出結論,Foo的原型鏈上一個節點指向Function
**經過上述代碼驗證得出如下結論:
1.所有對象都有_proto_這個屬性。
2.所有的原型對象都有constructor屬性,該屬性對應創建所有指向該原型的實例的構造函數。
3.原型鏈的頂端是null。
**
**4.對象本身的prototype和_proto_毫無關系,_proto_指向原型鏈上一個節點的原型。
5.Function的原型鏈的上一個節點是Function本身(這個很奇怪哎)。**
OK,拋出一個問題:
//通常情況下,為了只繼承父函數的原型而不繼承其他靜態方法往往這樣定義 b = function(){}; c = function(){}; b.prototype.say = 1; c.prototype.say = 2; function extend(father,son){ var def = function(){}; def.prototype = father.prototype; son.prototype = new def(); } extend(b,c)
問題:
1.繼承的時候可以直接使用son.prototype = father.prototype 嗎?
2.為什么要新建一個def函數,然后son繼承def的原型來繼承呢?
3.通過1方法和2方法生成的son是一樣的嗎?
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/93200.html
摘要:在上面的各種原型的變換中,其實難點就在于構造函數也是對象原型對象等所有對象都由構造這四個點。 這篇文章主要是學習一下JavaScript中的難點------原型和原型鏈 自定義一個對象 我們學習一門編程語言,必然要使用它完成一些特定的功能,而面向對象的語言因為符合人類的認知規律,在這方面做得很好,今天我以JS為例,探索一下JS不同于其他面向對象的語言的地方-------原型和原型鏈 首...
摘要:在上面的各種原型的變換中,其實難點就在于構造函數也是對象原型對象等所有對象都由構造這四個點。 這篇文章主要是學習一下JavaScript中的難點------原型和原型鏈 自定義一個對象 我們學習一門編程語言,必然要使用它完成一些特定的功能,而面向對象的語言因為符合人類的認知規律,在這方面做得很好,今天我以JS為例,探索一下JS不同于其他面向對象的語言的地方-------原型和原型鏈 首...
摘要:接下來我們來聊一下的原型鏈繼承和類。組合繼承為了復用方法,我們使用組合繼承的方式,即利用構造函數繼承屬性,利用原型鏈繼承方法,融合它們的優點,避免缺陷,成為中最常用的繼承。 JavaScript是一門面向對象的設計語言,在JS里除了null和undefined,其余一切皆為對象。其中Array/Function/Date/RegExp是Object對象的特殊實例實現,Boolean/N...
摘要:類才支持實例屬性代碼解讀上面暫時只是概念性的寫法,事實上,的類只是一個原型鏈的語法糖而已,主要是從寫法上更接近于面相對象的類而已,另外一個作用就是區分的構造函數和函數之間的區分。 ES5的原型鏈和ES6的類實現詳解 JavaScript最初設計時受到了面相對象編程的影響,從而引入了new關鍵字,來實例化對象。而在ES5中new后面跟著的是構造函數(也是函數),而到了ES6則改成了cla...
閱讀 994·2023-04-25 15:42
閱讀 3584·2021-11-02 14:38
閱讀 2886·2021-09-30 09:48
閱讀 1419·2021-09-23 11:22
閱讀 3379·2021-09-06 15:02
閱讀 3186·2021-09-04 16:41
閱讀 607·2021-09-02 15:41
閱讀 2012·2021-08-26 14:13