什麼是原型 原型物件 原型鏈?

2021-10-12 04:56:31 字數 1208 閱讀 2124

每當宣告乙個函式的時候,系統都有乙個 prototype (原型)屬性,這個屬性是乙個指標,指向乙個物件, 而這個物件的用途是包含可以由特定型別的所有例項共享的屬性和方法,稱為原型物件

在宣告了乙個函式後,這個建構函式(宣告了的函式)中會有乙個屬性prototype,這個屬性指向的就是這個建構函式(宣告了的函式)對應的原型物件;原型物件中有乙個屬性constructor,這個屬性指向的是這個建構函式(宣告了的函式)

function school(){}

var stu = new school()

console.log(school.prototype===stu.__proto__) // true

此時,stu就是那個建構函式school建立出來的物件,這個stu物件中是沒有prototype屬性的,但他有__proto__屬性,prototype屬性只有在建構函式students中有

建構函式students中有prototype屬性,指向的是school對應的原型物件;而stu是建構函式students建立出來的物件,他不存在school屬性,所以在呼叫prototype的時候的結構是undefined,但stu有乙個__proto__屬性,stu呼叫這個屬性可以直接訪問到建構函式students的原型物件(也就是說,stu的__proto__屬性指向的是建構函式的原型物件) 

如果我們訪問stu中的乙個屬性name,如果在stu物件中找到,則直接返回。如果stu物件中沒有找到,則直接去stu物件的__proto__屬性指向的原型物件中查詢,如果查詢到則返回。(如果原型中也沒有找到,則繼續向上找原型的原型—原型鏈)

js中每個函式被建立時都會包含乙個prototype屬性並指向乙個物件,這個物件的用途是包含了建構函式所有例項共享的屬性和方法,這個物件也被叫做原型物件

當訪問乙個物件的某個屬性時,會先在這個物件本身屬性上查詢,如果沒有找到,則會去它的__proto__隱式原型上查詢,即它的建構函式的prototype,如果還沒有找到就會再在建構函式的prototype__proto__中查詢,這樣一層一層向上查詢就會形成乙個鏈式結構,我們稱為原型鏈

什麼是原型和原型鏈

所有引用型別都有乙個 proto 隱式原型 屬性,屬性值是乙個普通的物件 所有函式都有乙個prototype 原型 屬性,屬性值是乙個普通的物件 所有引用型別的 proto 屬性指向它建構函式的prototype var a 1,2,3 a.proto array.prototype true 當訪...

什麼是原型鏈?

在看到的一篇文章,感覺描述很清晰,為了防止自己忘記,特此理解性的記錄下來,也供大家一起學習,如有不對之處請拍案指出,謝謝。原型鏈是針對建構函式的,比如我先建立了乙個 plane 建構函式,然後給這個函式賦予 fly 的方法,我再建立乙個 fighter 建構函式並讓其繼承 plane 物件,然後當我...

JS原型物件,原型鏈

js中建立物件都是通過建構函式建立的,所以每個物件中都有乙個指向其建構函式的指標constructor var obj new object var arr new array var obj2 字面量建立實質上是上面方式的簡寫 var arr2 var str new string test 建立...