首頁  >  文章  >  web前端  >  原型、原型鏈 的相關內容解說

原型、原型鏈 的相關內容解說

jacklove
jacklove原創
2018-06-11 22:30:352141瀏覽




#這裡prototype表示系統自帶的屬性,第一句表示設定了Person的祖先有一個屬性Lastname,後面建立person和person1

#屬性的時候就會繼承這個屬性值



##一個小的例子表示繼承的關係

prototype可以將一些物件共有的東西致只寫一遍,不同每次都創建一遍




#此外,還可以把原型包裝起來,這樣會更好




#上範例中的constructor是系統自帶的屬性(叫做建構器),他是從prototype繼承過來的,並且這個屬性是可以更改的,它的內容是構造函數我們可以看一下


淺紫色的代表系統自帶的


而另一個屬性__proto__的內容是prototype的內容(兩個__是隱含命名規則)

一般在開發中如果你不想讓同事存取或改變一個參數,那麼就會想這樣命名一個參數,js中沒有絕對的private



這裡有一個修改__proto__的例子,這樣ff就可以存取person.prototype裡面的值了





#這裡存取Person.name依然會是sunny,因為這個例子就好像


雖然改變了整個prototype的結構,但在第二次改為cherry之前,已經

也就是在被new的時候this{}裡面的值就會回傳給person,然後再改變成cherry的時候就不會被影響了,所以這壓力要考慮執行順序。

但是如果改變函數語句順序:


#那麼person.name就會變成cherry,因為執行順序變了

但如果是

這樣來修改,就能修改成功了



原型鏈


這是一個原型鏈,透過prototype這個結點鏈接,這樣的話,son就能訪問到lastname,然後其實Grand上面還有一個原型,有一個Grand.prototype=object    object是所有原型鏈的終端機







############################################ #####################################因為new是person的,所以this{}回傳給person, ######

person.__proto__連結的是Person.prototype,所以不變(也就是說Person.prototype除了直接修改,都變不了





Person不能直接存取sayName


Object.create(原型):

這樣的話就能存取Person中的prototype,但不能存取到age這個內部資料

這樣是能都存取到的:



之前有一句話叫:

絕大多數物件最終都會誰繼承自Object.prototype

#但是並不是所有物件都是繼承自它的,因為存在以下例外:


#這樣的話:


#obj裡面就沒有__proto__了


如果手動給他加上__proto__:


#但是這樣的話


就找不到obj.name了,要存取這個資料只能:

#/************************************************** **** ********************************************** ******** *********/







####### # ########拓展:############toString()方法:############toString()方法是Object.prototype裡面自帶的,所以絕大數物件都會有這個方法(除了undefined和null)######################這兩個不能透過包裝類別來繼承Object的原型,所以訪問不了。 ##################數字只能這樣訪問,而不能:##################因為數字裡面的' .'優先權很高,系統會把它認為是小數點(浮點型別),所以會報錯######而布林型別就能直接這樣############## #############我們再來詳細解析:###################num.toString()就會出現包裝類別:## ################而其實Number的原型裡面有一個重寫的toString()方法:###


而根據原型鏈,Number的原型裡面的__proto__會繼承Object的原型:


所以當呼叫num.toString()方法時會一級一級往上,先呼叫Number裡的這個函數原型


再來實戰:



這裡呼叫的肯定是:


這裡從object.prototype繼承過來的toString方法,如果我想要截斷它:


#只需要重寫這個方法就行了

結果:



以下是一些已經自動重寫過的:



最後講一個小bug:


#這是因為js的精確度不準的原因,

本文解釋了原型、原型鏈的相關內容,更多相關知識請關注php中文網。

相關推薦:

JQuery中DOM操作-wrap

django 使用request 取得瀏覽器傳送的參數

React this綁定的幾點思考

#

以上是原型、原型鏈 的相關內容解說的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn