摘要:的原型鏈,需要深刻的研究才能搞懂。對象都是通過函數即構造函數創建的。即這里的成為隱式原型。而構造函數的屬性指向自身。這個對象的構造函數的是一個對象。走到原型鏈的終結。
- JS是一個非常有魅力的語言也是一個比較煩人的語言,主要就是因為他的特殊性靈活性。
JS的原型鏈,需要深刻的研究才能搞懂。不要糾結細節吧。實在不行就按這個死背住,慢慢就理解了。總之吧就是一句話萬物皆對象。
結合這個圖示仔細理解吧。在你搞懂后你會發現。很嗨很刺激!
下面是必須記住的點。基礎知識不用說了吧。
對象都是通過函數(即構造函數)創建的。
函數也是一個對象,即屬性的集合,所以也可以對函數進行自定義屬性。
每個函數默認的有一個prototype屬性。
這個prototype的屬性值是一個對象,默認的只有一個construct屬性指向函數本身。
每個對象都有一個隱藏的屬性——“__proto__”,這個屬性引用了創建這個對象的函數的prototype。即:fn.__proto__ === Fn.prototype
這里的"__proto__"成為“隱式原型”。
對象的construct屬性指向構造函數。而構造函數的construct屬性指向自身。
回答什么是JS的原型鏈?訪問一個對象的屬性時,先在基本屬性中查找,如果沒有,再沿著__proto__這條鏈向上找,這就是原型鏈。這個對象的__proto__等于這個對象構造方法的prototype。這個對象的構造函數的prototype是一個對象。 這個對象是被Object()創建出來的。(Object()是JS內部定義好的。) 所以它的__proto__就等于Object.prototype。Object.prototype等于null。到此就是原型鏈的終結。
然后呢還有一個點。
函數可以是一個普通函數也可以作為構造函數去創建對象。 當這個時候構造函數就和Object()函數是一個作用:作為構造函數去生成對象。
普通構造函數和Object一樣的 他既是函數也是對象。他的__proto__指向于Function.prototype。這也是JS內部定義好的。Function.__proto__指向Function.prototype有點雞生蛋蛋生雞的意思(Function是被自己創建的)。這里是一個循環引用。 Function.prototype也是一個對象,他的__proto__指向于Object.prototype。Object.prototype等于null。走到原型鏈的終結。
以上就是我對JS原型鏈的理解,有什么錯誤的地方希望大家指出。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/109312.html
摘要:所以,當我們使用時,不能進行復雜數據類型的判斷,因為它調用的是,雖然也繼承自,但在上重寫了,而我們通過實際上是通過原型鏈調用了。 關于 toString 方法在有關js的開發中使用應該是相當廣泛的,這兩天在看jQuery的源碼,從 toString 本身了解與鞏固了不少知識,寫出來與大家一同分享。首先先上一段代碼: var arr=[1,2,3]; toString.call(arr)...
摘要:明確重要的一點,這個連接存在于實例與構造函數的原型對象之間,而不是存在于實例與構造函數之間。相當于重新創建了,指向構造函數這一部分相當于是重新在原型對象中創建了一個屬性,同時指向構造函數。 之前對js原型和原型鏈的理解一直覺得很繞,繞來繞去的,在看了《JavaScript高級程序設計》和各種文章之后,終于對原型和原型鏈有了初步的了解,可是還是沒有很深入的了解,今次通過以前段時間遇到的一...
摘要:寄生組合式繼承終于寫到最后一個繼承了,我們在之前講了種繼承方式,分別是原型鏈,借用構造函數繼承,組合繼承,原型式繼承,寄生式繼承,其中,前三種聯系比較緊密,后面兩種也比較緊密,而我們要講的最后一種,是和組合繼承還有寄生式繼承有關系的。 前言 趁周末結束之前趕緊先把坑填上。上回我們說到了原型鏈,并且留下了幾個思考題,先把答案公布一下。 在最后一個例子里,console.log(b1.c...
摘要:只是構造函數上的一個屬性,它是一個指針,指向原型對象,并不表示就是原型對象。在上一個例子中,就是一個對象,這個對象可以說是原生構造函數的實例,所以也是一個對象,所以它也有屬性,不過它的指向也就是原型鏈的頂端,再往上就沒有了。 上一篇講了①原型對象是什么;②__proto__、prototype、constructor的關系;③原型對象的作用;④原型對象帶來的一些需要注意的問題; 沒理解...
閱讀 922·2023-04-25 18:51
閱讀 1880·2021-09-09 11:39
閱讀 3287·2019-08-30 15:53
閱讀 2104·2019-08-30 13:03
閱讀 1316·2019-08-29 16:17
閱讀 591·2019-08-29 11:33
閱讀 1891·2019-08-26 14:00
閱讀 2130·2019-08-26 13:41