原型,原型图,原型链, Function,Object

2019-05-17  本文已影响0人  饥人谷_阿银

1.当 new 一个函数的时候会创建一个对象,『函数.prototype』 等于 『被创建对象.proto
2.一切函数都是由 Function 这个函数创建的,所以『Function.prototype === 被创建的函数.proto
3.一切函数的原型对象都是由 Object 这个函数创建的,所以『Object.prototype === 一切函数.prototype.proto

原型图

原型图.png

示例

//代码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的原型图:

image

下面是代码2的原型图:

image

关于代码3:

instanceof 的作用是判断一个对象是不是一个函数的实例。比如 obj instanceof fn, 实际上是判断fn的prototype是不是在obj的原型链上。比如: obj.proto === fn.prototype, obj.proto.proto === fn.prototype,obj.proto...proto_ === fn.prototype,只要一个成立即可。

所以(根据图2来找)

至此,问题全被完美解决。

转自知乎专栏(https://zhuanlan.zhihu.com/p/22473059)

上一篇 下一篇

猜你喜欢

热点阅读