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

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
  • (1)People函数创建了对象 p,所以People.prototype === p.proto

  • (2)Object函数创建了People.prototype对象,所以Object.prototype === People.prototype.proto

  • (3)People 作为对象的角色被函数Function创建,所以 Function.prototype === People.proto

下面是代码2的原型图:

image
  • (1)任何函数都是 Function 创建,所以Function 创建了 Function,所以 Function.prototype === Function.proto

  • (2)Object 也是函数。所以Function创建了Object,所以 Function.prototype === Object.proto

  • (3)Function.prototype 是普通对象,普通对象是由Object创建的,所以 Function.prototype.proto === Object.prototype

关于代码3:

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

所以(根据图2来找)

  • 对于 Function instanceof Function,因为 Function.proto === Function.prototype,所以为true。
  • 对于 Object instanceof Object, 因为 Object.proto.proto === Function.prototype.proto === Object.prototype , 所以为true
  • 对于 Function instanceof Object, 因为 Function.proto.proto === Function.prototype.proto === Object.prototype, 所以为 true
  • 对于 Object instanceof Function, 因为 Object.proto === Function.prototype,所以为 true

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

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 什么是原型语言 只有对象,没有类;对象继承对象,而不是类继承类。 “原型对象”是核心概念。原型对象是新对象的模板,...
    zhoulujun阅读 6,897评论 0 12
  • JS中原型链,说简单也简单。 首先明确: 函数(Function)才有prototype属性,对象(除Object...
    前小白阅读 9,408评论 0 9
  • 利用了一个下午的时间,将原型和闭包这块的知识去了解了一下,做了些笔记和总结,感兴趣的童鞋可以移步王福朋的博客,写的...
    好奇的猫猫猫阅读 1,796评论 0 1
  • 第三十九章 一次真诚相合作 事业爱情皆收获 主任兑现曾约定 小伙拒绝是为何 自总从沈亦菲喊出了,“梁兄我愿意”后。...
    沉默是金_e62b阅读 2,833评论 0 21
  • 说来话长,也许是因为已经到了这样的一个年龄,也许是今年命犯桃花,总之身边给我介绍女朋友的突然开始多了起来,我是一个...
    日记本9527阅读 11,423评论 3 4

友情链接更多精彩内容