原型以及原型鏈的理解

2021-10-23 17:48:53 字數 1828 閱讀 5537

借用大佬的話就是萬物皆可為物件,但是物件如此之多,每個物件都要寫共有的方法麼,客觀上看我覺得這種事情也不可能,這時候就需要乙個類似於倉庫的東西,如果你手裡有就用你的,如果沒有就去找倉庫的,你可以在有使用想法的時候,提前準備放到倉庫裡,等使用的時候再去倉庫呼叫。接下來說的就是把這個倉庫對應到那個原型物件上去。

js中的每乙個物件或者說每乙個函式都有乙個屬性prototype,而這個屬性值是乙個物件,這兩個物件之間有一定關係,就好像兄弟一樣,也可以說這個prototype是乙個指標,指向了這個物件,而這個物件可以理解為手握乙個儲存著方法和屬性的倉庫的哥哥,而呼叫者也就是物件的例項可以當做弟弟,這個倉庫是和弟弟共享的,而哥哥(原型物件)本身有乙個constructor屬性,而它是指向原來物件(也就是未例項化的時候)的建構函式。例項化後的物件裡有個__proto__屬性,他是指向那個共享倉庫的原型物件,這個就相當於親情鑰匙了。

說的簡單專業點,就是js裡的物件裡有個屬性prototype指向了原型物件,而物件的例項化後獲得的__proto__屬性也是指向原型物件。因為_proto__屬性和prototype都是指向原型物件,所以例項後可以共享原型物件裡的方法和屬性

<

!doctype html>

"en"

>

"utf-8"

>

"viewport" content=

"width=device-width, initial-scale=1.0"

>

document<

/title>

<

/head>

function

animal

(eat,bark)

function

test()

test()

;<

/script>

<

/body>

<

/html>

在現實生活中我們每個人的工作可能都是不同的,而js物件也是,每個物件都有自己的方法,找不到的方法

可以去原型物件裡找,但是問題來了,那麼多的物件那新增的方法都要儲存在同乙個原型物件中麼,答案 肯定是不行的。所以才會有原型鏈出現

用開始講原型物件的大白話來說就是,如果哥哥的倉庫裡沒有想要的方法,就去找父親要,父親沒有就繼續向上一級要,可以一直追到頂端,也就是object的原型

//原型鏈: child -> new parent() -> new grandparent() -> grandparent原型物件 -> new object();

function

grandparent()

parent.prototype =

newgrandparent()

;function

parent()

child.prototype =

newparent()

;function

child()

var child =

newchild()

;console.

log(child)

;// child

console.

log(child.a)

;// 3

console.

log(child.b)

;//2

console.

log(child.c)

;//1

JavaScript原型以及原型鏈

原型物件的用途是為每個例項物件儲存共享的方法和屬性,它僅僅是乙個普通物件而已。並且所有的例項是共享同乙個原型物件,因此有別於例項方法或屬性,原型物件僅有乙份。在訪問乙個物件的屬性的時候,首先在當前物件中找,如果沒有在其原型物件找 復用的內容放在prototype,讓類的例項擁有相同的功能 小紅書上的...

JS 原型以及原型鏈

原型煉圖 點選此處放大 原型物件 無論什麼時,只要建立乙個新函式,就會根據一組特定的規則為該函式建立乙個 prototype 屬性 這個屬性指向該函式的原型物件。預設情況下,所有原型物件都會自動獲得乙個 constructor 建構函式 屬性,這個屬性包含乙個指向 prototype 屬性所在函式的...

js 原型 原型鏈理解

執行發現如下 自定義乙個函式,函式包含兩個關鍵資料 prototype,proto 1 原型 prototype person具有prototype屬性 包含我們定義的屬性name,age以及constructor,並且constructor指向我們的person函式,可以理解為prototype就...