class
person
say(str)
}let p =
newperson()
;console.
log(p.age)
;//undefined
第一步:在p物件自身找,但是沒有找到age屬性// p物件
第二步:順著原型鏈在p.__proto__(也就是person.prototype)上找,還是沒有找到age屬性// p.__proto__ === person.prototype //true
第三步:順著原型鏈在p.__proto__.__proto__(也就是object.prototype)上找,還是沒有找到age屬性// p.__proto__.__proto__ === object.prototype //true
第四步:順著原型鏈在p.__proto__.__proto__.__proto__(也就是object.prototype.__proto__)上找,發現object.prototype.__proto__為null,於是宣布尋找失敗,返回undefined// p.__proto__.__proto__.__proto__ === object.prototype.__proto__ //true
null
在object.prototype物件上新增乙個屬性,在例項化物件上能成功訪問到該屬性,便能證明繼承關係
object.prototype.age =10;
console.
log(p.age)
;// 10
可以看到下面這些建構函式的原型物件都是由object建構函式例項化出來的
理論上來講object.prototype.__proto__也應該是乙個物件,也應該是由object例項化出來的,但是這樣會導致原型鏈變成乙個死迴圈,出於這個考慮object.prototype.__proto__被定義為null
function.__proto__ === string.__proto__ // true
string.__proto__ === number.__proto__ // true
number.__proto__ === object.__proto__ // true
object.__proto__ === function.__proto__ // true
function.prototype.__proto__ === string.prototype.__proto__ // true
string.prototype.__proto__ === number.prototype.__proto__ // true
number.prototype.__proto__ === object.prototype.__proto__ // false
object.__proto__ === function.prototype.__proto__ // false
JavaScript原型以及原型鏈
原型物件的用途是為每個例項物件儲存共享的方法和屬性,它僅僅是乙個普通物件而已。並且所有的例項是共享同乙個原型物件,因此有別於例項方法或屬性,原型物件僅有乙份。在訪問乙個物件的屬性的時候,首先在當前物件中找,如果沒有在其原型物件找 復用的內容放在prototype,讓類的例項擁有相同的功能 小紅書上的...
javascript之原型,原型鏈
1.定義 原型是function物件的乙個屬性,它定義了建構函式製造出的物件的公共祖先。通過該建構函式產生的物件,可以繼承該原型的屬性和方法。原型也是物件。2.利用原型特點和概念,可以提取共有屬性。3.物件如何檢視原型 隱式屬性 proto 4.物件如何檢視物件的建構函式 constructor v...
JavaScript原型與原型鏈
程式設計師兼職神器 vip影視 一鍵建站,賣vip會員賺房租 hadoopdoc.com 1 每個函式都有乙個prototype屬性,它預設指向乙個object空物件 即稱為 原型物件 原型物件中有乙個constructor,它指向函式物件 2 給原型物件新增屬性 一般都是方法 作用 函式的所有例項...