怎么理解JavaScript原型、原型链

原型

JavaScript被描述为一种基于原型的语言,也就是每一个对象都拥有一个原型对象。

当我们访问一个对象的属性时,它不仅仅该改对象上查找,还会到这个对象的原型上查找,甚至是到这个对象的原型的原型上查找,这样一层一层向上查找,直到找到匹配的属性或者是到达原型链的顶端。

这些属性和方法是定义在Object的构造函数上的prototype属性上。而并不是实例对象本身。

比如:函数可以有属性,每一个函数都有一个特殊的属性叫做原型prototype,这个原型prototype是一个对象,也就是原型对象。

原型对象上自带一个属性constructor,这个属性指向函数。

原型链

原型对象也可能拥有原型,并且从中集成方法和属性,一层一层、以此类推。这种关系就是原型链,这就是为什么任何一个对象会拥有定义在其他对象中的属性和方法的原因。

在对象实例和它们的构造函数之间建立起一个链接,通过_proto_属性访问原型对象的原型对象,prototype属性访问到实例的构造函数。

总结:

  1. 一切对象都是集成于Object对象,Object对象直接直接继承根源对象null
  2. 一切函数对象,都是继承于Function对象
  3. Object对象直接继承于Function对象
  4. Function对象的__proto__会指向自己的原型对象,最终还是继承于Object对象。

这就是关于原型和原型链的笔记,希望对你有所帮助!

相关推荐
小王不爱笑1323 分钟前
IO 模型
开发语言·python
知我Deja_Vu22 分钟前
【避坑指南】ConcurrentHashMap 并发计数优化实战
java·开发语言·python
AI+程序员在路上31 分钟前
CANopen 协议:介绍、调试命令与应用
linux·c语言·开发语言·网络
2401_8318249632 分钟前
基于C++的区块链实现
开发语言·c++·算法
qq_406176141 小时前
深入浅出 Pinia:Vue3 时代的状态管理新选择
javascript·vue.js·ecmascript
m0_518019481 小时前
C++与机器学习框架
开发语言·c++·算法
ZTLJQ1 小时前
深入理解逻辑回归:从数学原理到实战应用
开发语言·python·机器学习
qq_417695051 小时前
C++中的代理模式高级应用
开发语言·c++·算法
德育处主任Pro2 小时前
前端元素转图片,dom-to-image-more入门教程
前端·javascript·vue.js
波波0072 小时前
每日一题:.NET 中的“反射”是什么?
开发语言·.net