首先明確一下椅文,原型鏈有盡頭
Object.prototype.__proto__ === null
驗(yàn)證公式:
實(shí)例對(duì)象.__proto__ === 構(gòu)造函數(shù).prototype
//例子:
var obj = {}
obj.__proto__ === Object.prototype //true
var s = 'zink'
s.__proto__ === String.prototype //true
image.png
構(gòu)造函數(shù)的prototype
也是一個(gè)對(duì)象
Array.prototype instanceof Object //true
Function.prototype instanceof Object //true
所以可以將驗(yàn)證公式變形為:
構(gòu)造函數(shù).prototype.__proto__ === Object.prototype
而所有構(gòu)造函數(shù)的__proto__
都指向了Function.prototype
皆刺,所以函數(shù)都是構(gòu)造函數(shù)Function的示例對(duì)象
Array.__proto__ === Function.prototype //true
Function.__proto__ === Function.prototype //true
Object.__proto__ === Function.prototype //true
__proto__
每個(gè)實(shí)例對(duì)象的__proto__
一定對(duì)應(yīng)一個(gè)原型對(duì)象凌摄,并且從原型對(duì)象上繼承屬性和方法。
prototype
當(dāng)你創(chuàng)建函數(shù)時(shí)望伦,JS會(huì)為這個(gè)函數(shù)自動(dòng)添加prototype
屬性煎殷,值是一個(gè)有 constructor
屬性的對(duì)象,不是空對(duì)象劣摇。
constructor
constructor
僅僅可以用于識(shí)別對(duì)象是由哪個(gè)構(gòu)造函數(shù)初始化