原型鏈分享
原項鏈詳解
什么是原型鏈:
javaScript? 常被描述為一種基于原型的語言(prototype-based language) ——每一個對象擁有一個原型對象登渣,對象以其原型為模版,從原型通過(_proto_)屬性繼承方法和屬性,原型對象也是對象也擁有自己的原型對象并從中通過(_proto_)屬性繼承方法和屬性充坑,一層一層神年,以此類推豺裆。這種靠(_proto_)屬性串起來的關(guān)系被稱為原型鏈(prototypechain),它解釋了為什么一個對象會擁有定義在其他對象中的屬性和方法。
概念理解
對象包括普通對象和函數(shù)對象渺杉,
1,什么是函數(shù)對象挪钓?
2 什么是普通對象是越?
原項鏈的起源
到底是先有的雞還是先有有的蛋呢 ?還是無中生有呢碌上?
疑問一:誰是JS的起源倚评?
整個js起源于 Object和Function兩個類。
疑問二:
?Object和Function系統(tǒng)自帶的函數(shù)對象馏予,誰創(chuàng)建的誰呀天梧?
沒有誰創(chuàng)建的誰,Object和Function分別被定義的霞丧,同時產(chǎn)生的呢岗。
證據(jù)在哪?
1蛹尝,Object 詳解
Object.prototype詳解
幾乎所有的 JavaScript 對象都是?Object?的實例后豫;一個典型的對象繼承了Object.prototype的屬性(包括方法),盡管這些屬性可能被遮蔽(亦稱為覆蓋)突那。但是有時候可能故意創(chuàng)建不具有典型原型鏈繼承的對象挫酿,比如通過Object.create(null)創(chuàng)建的對象,或者通過Object.setPrototypeOf方法改變原型鏈愕难。
改變Object原型早龟,會通過原型鏈改變所有對象惫霸;除非在原型鏈中進一步覆蓋受這些變化影響的屬性和方法。這提供了一個非常強大的拄衰、但有潛在危險的機制來覆蓋或擴展對象行為它褪。
只有兩個屬性constructor指向它所屬的函數(shù)對象的名稱Object()._proto_指向null對象
new Object () 生成的實例結(jié)果決定了其prototype屬性所指的原型對象的類型。
2,? Function 詳解
new Function () 生成的實例結(jié)果決定了其prototype屬性所指的原型對象的類型翘悉。
3 Object和Function 是怎么聯(lián)系在一起的呢茫打?
4,原型關(guān)系圖
typeof 基本的類型
instantof 是不是在同一個原型上
定義在constructor和prototype的屬性和方法都會被繼承到實例對象妖混。定義在在對象的方法不會被繼承老赤。