javascript原型鏈剖析

2021-09-22 18:49:24 字數 1589 閱讀 8846

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 給原型物件新增屬性 一般都是方法 作用 函式的所有例項...