1.當(dāng) new 一個(gè)函數(shù)的時(shí)候會創(chuàng)建一個(gè)對象,『函數(shù).prototype』 等于 『被創(chuàng)建對象.proto』
2.一切函數(shù)都是由 Function 這個(gè)函數(shù)創(chuàng)建的,所以『Function.prototype === 被創(chuàng)建的函數(shù).proto』
3.一切函數(shù)的原型對象都是由 Object 這個(gè)函數(shù)創(chuàng)建的,所以『Object.prototype === 一切函數(shù).prototype.proto』
原型圖
示例
//代碼1
function People(){}
var p = new People()
p.__proto__ === People.prototype
People.__proto__ === Function.prototype
People.prototype.__proto__ === Object.prototype
//代碼2
Function.prototype === Function.__proto__
Function.prototype === Object.__proto__
Function.prototype.__proto__ === Object.prototype
Function instanceof Object
//代碼3
Object instanceof Function
Function instanceof Object
Function instanceof Function
Object instanceof Object
下面是代碼1的原型圖:
(1)People函數(shù)創(chuàng)建了對象 p萄窜,所以People.prototype === p.proto射富;
(2)Object函數(shù)創(chuàng)建了People.prototype對象,所以O(shè)bject.prototype === People.prototype.proto攘须;
(3)People 作為對象的角色被函數(shù)Function創(chuàng)建,所以 Function.prototype === People.proto
下面是代碼2的原型圖:
(1)任何函數(shù)都是 Function 創(chuàng)建殴泰,所以Function 創(chuàng)建了 Function于宙,所以 Function.prototype === Function.proto;
(2)Object 也是函數(shù)悍汛。所以Function創(chuàng)建了Object捞魁,所以 Function.prototype === Object.proto ;
(3)Function.prototype 是普通對象离咐,普通對象是由Object創(chuàng)建的谱俭,所以 Function.prototype.proto === Object.prototype
關(guān)于代碼3:
instanceof 的作用是判斷一個(gè)對象是不是一個(gè)函數(shù)的實(shí)例。比如 obj instanceof fn, 實(shí)際上是判斷fn的prototype是不是在obj的原型鏈上旺上。比如: obj.proto === fn.prototype瓶蚂, obj.proto.proto === fn.prototype,obj.proto...proto_ === fn.prototype宣吱,只要一個(gè)成立即可窃这。
所以(根據(jù)圖2來找)
- 對于 Function instanceof Function,因?yàn)?Function.proto === Function.prototype征候,所以為true杭攻。
- 對于 Object instanceof Object, 因?yàn)?Object.proto.proto === Function.prototype.proto === Object.prototype 疤坝, 所以為true
- 對于 Function instanceof Object, 因?yàn)?Function.proto.proto === Function.prototype.proto === Object.prototype兆解, 所以為 true
- 對于 Object instanceof Function, 因?yàn)?Object.proto === Function.prototype跑揉,所以為 true
至此锅睛,問題全被完美解決。
轉(zhuǎn)自知乎專欄(https://zhuanlan.zhihu.com/p/22473059)