24:JS 原型链,原型链的顶端是什么?Object 的原型是什么?Object 的原型

开发者 2024-9-7 11:19:54 30 0 来自 中国
可以大概把这个讲清楚弄明白是一件很困难的事,
起首明白原型是什么,在 ES6 之前,JS 没有类和继承的概念,JS 是通过原型来实现继承的,在 JS 中一个构造函数默认带有一个 prototype 属性,这个的属性值是一个对象,同时这个 prototype 对象自带有一个 constructor 属性,这个属性指向这个构造函数,同时每一个实例都会有一个proto属性指向这个 prototype 对象,我们可以把这个叫做隐式原型,我们在利用一个实例的方法的时间,会先查抄这个实例中是否有这个方法,没有的话就会查抄这个 prototype 对象是否有这个方法,基于这个规则,如果让原型对象指向另一个范例的实例,即
constructor1.protoytpe=instance2,这时间如果试图引用 constructor1 构造的实例 instance1 的某个属性 p1,
起首会在 instance1 内下属性中找一遍,
接着会在 instance1.proto(constructor1.prototype)便是 instance2 中探求 p1
征采轨迹:instance1 -> instance2 -> constructor2.prototype……->Object.prototype;这便是原型链,原型链顶端是 Object.prototype
增补学习:
每个函数都有一个 prototype 属性,这个属性指向了一个对象,这个对象正是调用该函数而创建的实例的原型,那么什么是原型呢,可以这样明白,每一个 JavaScript 对象在创建的时间就会预制管理另一个对象,这个对象就是我们所说的原型,每一个对象都会从原型继承属性,如图:
那么怎么表现实例与实例原型的关系呢,这时间就要用到第二个属性 proto
这是每一个 JS 对象都会有的一个属性,指向这个对象的原型,如图:
既然实例对象和构造函数都可以指向原型,那么原型是否有属性指向构造函数大概实例呢,指向实例是没有的,因为一个构造函数可以天生多个实例,但是原型有属性可以直接指向构造函数,通过 constructor 即可
接下来解说实例和原型的关系:
当读取实例的属性时,如果找不到,就会查找与对象相干的原型中的属性,如果还查不到,就去找原型的原型,不停找到最顶层,那么原型的原型是什么呢,起首,原型也是一个对象,既然是对象,我们就可以通过构造函数的方式创建它,以是原型对象就是通过 Object 构造函数天生的,如图:
那么 Object.prototype 的原型呢,我们可以打印 console.log(Object.prototype.proto === null),返回 true
null 表现没有对象,即该处不应有值,以是 Object.prototype 没有原型,如图:
图中这条蓝色的线便是原型链,
末了增补三点:
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-12-4 17:08, Processed in 0.121270 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表