JavaScript中protoype与__proto__

罗建波 2022-10-28 19:02:33

 prototype(原型对象)

每一个函数天生自带一个属性叫做prototype,是一个对象

只要函数定义好以后,这个prototype就出生了

构造函数也是函数,构造函数也有prototype 我们可以向里面添加内容

prototype里面有一个属性叫做constructor

 表示我是哪一个构造函数伴生的原型对象

constructor 属性(构造器)

 只有函数天生自带的那个prototype上才有

表示我是哪一个构造函数所自带的原型对象

作用:判断数据类型

每一个对象天生自带一个属性叫做:_proto_指向所属构造函数的prototype

当一个对象,没有准确的构造函数来实列化对象的时候,我们都看作是内置构造函数Object的实例

结论:

  • 🚗任何一个对象开始查找
  • 🚗按照_proto_开始向上查找
  • 🚗最终都能找到Object.prototype
  • 🚗我们管这个使用_proto_串连起来的对象链状结构,叫做原型链

原型链的作用

为了对象访问机制服务

原型:

  • 是每一个函数自带的一个对象空间,它在里面写方法是为了给实列使用的多个实例共享方法的

原型链:

  • 就是使用_proto_串联起来的对象链状结构,为了对象访问机制服务的
  • 原型和原型链没有任何关系就像java和JavaScript的关系

所有的引用类型(数组、对象、函数)都有一个__proto__属性(也称隐式原型属性),属性值是一个普通的对象

所有的函数都有一个prototype属性(也称显式原型属性),属性值也是一个普通的对象; 

所以三者的关系是,每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。通俗点说就是,实例通过内部指针可以访问到原型对象,原型对象通过constructor指针,又可以找到构造函数。

 

 

...全文
151 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

11

社区成员

发帖
与我相关
我的任务
社区描述
欢迎大家分享自己的成长心得
大数据前端后端 高校 重庆
社区管理员
  • c_university_2082
  • 菠萝_
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧