對於原型鏈一直學的很懵,什麼prototype __ proto __,實在是繞啊。
有一張原型鏈的**(如下)如果是剛剛入門肯定被搞得暈頭轉向,這乙個箭頭那乙個箭頭的。今天把他拆開進行分析。
首先 函式才有 prototype 原型,物件 有 __ proto __ 屬性。
上面的圖就說明了 prototype 和 __proto __ 的區別
再到**上來看看
let obj =
;console.
log(obj.prototype)
;//undefied
console.
log(obj.__proto)
;//object
letfn
=function()
console.
log(fn.prototype)
// fn {}
console.
log(fn.__proto__)
//function(){}
再來看一張圖
有乙個 person 構函式, new出來乙個 person1 的函式。
person1 的constructor 的指向原建構函式
person1的 __ proto __ 指向 person.prototype
person.prototype 的 constructor 是指向 person的
person.prototype 的 prototype 是 person.prototype
還是有點繞 ,再看看**就能明白了
var
person
=function()
var person1 =
newperson()
person1.constructor===person;
//true
person === person.prototype.constructor;
//true
person1.__proto__ === person.prototype;
//true
person1.__proto__.constructor === person1.constructor //true
原型知道了,再看看原型l鏈
所有函式的prototype 指向 object.prototype
也就是person1 ——> person.prototype ——> object.prototype
在 js裡萬物皆物件,函式也屬於乙個物件 所有就多了
person ——> function.prototype ——> object.prototype
到這是不是就會覺得這個原型鏈會一直這麼走下去,沒有終點,但是 在控制輸出
object.prototype.__ proto __ 會指向 null
object.prototype.__ proto __
//null
所有原型鏈是有頂端 原型 原型鏈
var animal function var dog function animal.price 2000 dog.prototype animal var tidy new dog console.log dog.price 為什麼輸出 undefined console.log tidy.pr...
原型,原型鏈
原型object.hasownproperty proname object 乙個物件的例項 propname 乙個屬性名稱的字串值 返回乙個布林值原型鏈中的this 原型物件 原型物件的作用 一般情況下,會把方法宣告在原型物件裡。目的是實現繼承。當物件訪問自身屬性或方法時,先從自身找有沒有,如果有...
原型 原型鏈
在最近的原型和原型鏈的學習中,感覺壓力有點大,學習難度也比較大,但又很基礎很重要,我們在學習中得要下很大的功夫才行。無論什麼時候,只要建立了乙個新的函式,就會根據一組特定的規則為這個函式建立乙個prototype的屬性,prototype這個屬性指向函式的原型物件,然後所有的的原型物件都會有乙個co...