马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#技术求助 ASP.NET技术求助

【源码下载】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接外包项目】 面试-葵花宝典下载

官方一群:

官方二群:

两张图解释原型与原型链

[复制链接]
查看1984 | 回复0 | 2019-8-13 18:21:31 | 显示全部楼层 |阅读模式
182550lzdgv5yg9oovnd5n.png


上面这张图出自 冴羽的博客,这张图已经能很好地解释原型与原型链了,其涉及到的属性如下:

  • prototype: 每个函数都有一个 prototype(原型)属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法,如果使用这个函数生成了实例,那么称这个对象为所有实例的原型。
  • __proto__: 每个对象都拥有__proto__属性,该属性用于实现原型链,当访问一个对象的属性时,如果该对象内部不存在这个属性,就通过原型链找直到找到或者到终点 null。
  • constructor:每个原型都有一个 constructor 属性指向关联的构造函数
我们可以用下面这段代码验证一下:
  1. function Person () {}let person = new Person()console.log(person.__proto__ === Person.prototype) // trueconsole.log(Person.prototype.constructor === Person) // trueconsole.log(Person.prototype.__proto__ === Object.prototype) // true
复制代码
下面这张图咱自己画的,主要是分析下 Object 与 Function 的原型问题:
所有的对象都是由 Object() 构造函数构造的,所有的函数声明 / 函数表达式都是 Function() 构造函数的实例,而 Object() 构造函数本身又是 Function() 构造函数的实例,其原型关系如下:
182550efspuvpsiv5v8tna.png


需要注意的是 Function() 的__proto__属性直接指向的是其原型对象。
我们可以用下面的代码来验证这张图:在 node 环境及浏览器环境下都是一样的效果
  1. console.log(Object.__proto__ === Function.prototype) // trueconsole.log(Function.__proto__ === Function.prototype) // trueconsole.log(Function.prototype.__proto__ === Object.prototype) // trueconsole.log(Object.prototype.__proto__ === null) // true
复制代码
来源:https://www.cnblogs.com/cmk1018/archive/2019/08/13/11347442.html
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则