前端攻城獅 js物件的高階使用 2

2021-08-21 07:31:43 字數 2555 閱讀 4062

什麼是原型鏈?我們先不來解釋定義,我們先來看看下面幾個例子。

xiaoming物件呼叫了乙個doing()方法,效果就是彈框並且上面有文字就是哈哈。試問為什麼會彈框?方法誰給的?tostring()方法哪來的?為什麼xiaoming可以呼叫tostring()方法?tostring()方法是誰的?

首先xiaoming物件是有student方法new出來的,所以在xiaoming的構造方法裡有student方法裡的所有的屬性和方法,所以可以呼叫到student的doing方法。那麼tostring()方法是誰的?我可以負責任的告訴你是object來的?那麼奇怪了,我**裡壓根就沒有object這幾個字母,你跟我說object來的?接下來我們來引出這個物件prototype和__proto__

prototype

prototype是函式的乙個屬性,它指向的是建構函式的原型,裡面包含了函式的相關資訊,所有函式都有prototype。我們來輸出一下

我們可以看到第乙個大括號裡面其實現實的是建構函式。

constructor表示的是建構函式的一些資訊,我們可以看到arguments,caller,length,name等資訊

__proto__則表示該物件的原型物件,就是object

__proto__

當你通過函式去new乙個物件,那麼該物件會有個__proto__屬性,該屬性是指向被建構函式的prototype屬性,也就是指向自己的原型物件。

我們可以通過輸出日誌來看看prototype和__proto__的值。

可以這麼理解student.prototype是student的原型,student.prototype是xiaoming的原型物件,xiaoming.__proto__指向的是student.prototype,所以xiaoming.__proto__等同於student.prototype。我們來整理一下它們的關係

prototype

student---------------> student.prototype

↑             

xiaoming-----_proto_ 

建構函式的prototype指向誰,那麼new出來的物件的__proto__就指向誰。

**************************************以上介紹了prototype __proto__的概念,prototype表示原型,那麼鏈的概念主要有__proto__來實現,組合起來就是原型鏈,下面來解釋一下原型鏈的概念與應用

怎麼體現呢?下面來一段demo

結果:執行上述**,會彈出內容是aihao的彈框

我們可以看到,我們沒有在student的構造方法裡去新增hobby方法,而是通過prototype方式新增,通過日誌可以看到hobby方法和constructor同級,所以在xiaoming的構造方法裡沒有hobby的方法,若要呼叫此方法需要通過__proto__去找。這就觸發了鏈式的關係,流程如下xiaoming要呼叫hobby方法,但是自己在構造方法中找不到該方法,則會通過xiaoming.__proto__去查詢hobby方法,若xiaoming.__proto__裡還找不到則繼往xiaoming.__proto__(student.prototype)的__proto__去向上找,直到找到最頂還是找不到則沒有。

正如之前提的乙個問題,tostring方法是哪來的?首先xiaoming的構造方法裡沒有tostring方法,那麼會往上找先找到xiaoming的原型物件-->xiaoming.__proto__,若還找不到tostring方法,則會再網上找,也就是xiaoming.__proto__的原型物件的原型物件,也就是object,最後找到了tostring方法,從而呼叫。

那麼__proto__就引出了原型鏈的概念,其實原型鏈是乙個動詞,是乙個操作。有很多個原型構成的鏈,當需要查詢或呼叫乙個函式的時候,先會在該物件的構造方法中去查詢,若沒有則會去查詢該物件的原型__proto__,若還是沒有則會繼續向上找,一直到到object就算是找到頭了。

效果如下 行走的小女孩 

利用物件導向的思維,學乙個方法,在方法裡去構建dom物件,對通過prototype去新增公共方法,將物件新增到陣列中,通過定時器讓他走起來。

前端攻城獅 js之dom物件 2

本章節主要講計算後樣式和測量的相關知識點。我們可以通過dom提供的可靠的api,去獲採樣式計算後最終的值。獲取計算後的樣式的方法有以下幾種 我們來分析一下三者的使用區別 getcomputedstyle 物件 getpropertyvalue 屬性 該方法無法相容到ie6 7 8 後面的屬性同css...

前端攻城獅 jQuery的使用 1

我們為什麼要用jquery?原生js開發的缺點 查詢元素比較麻煩,方法不多。操作樣式比較麻煩,需要進行ie版本的相容。動畫麻煩。html節點操作麻煩。so自從有了jquery,再也不用擔心。jquery是dom程式設計領域的霸主,簡化元素js開發。jquery本質上是js,所以可以理解為js的乙個庫...

前端學習路線 前端攻城獅,需要掌握的技術

前端並不是簡單的寫寫頁面。對於很多人來說,也許不知道前端具體是做什麼的,也不知道自己該學什麼?前端本身就是包含很多,看似也很難下手。但是學習路線明確了自然就好了,所以我就整理了一下,重點在下面 自從 node.js 的出現令前端開發擁有了控 務器的能力,也意味著前端開發向接入層邁進。而前端行業現在的...