JavaScript之走近原型链

域名2025-11-05 10:45:296325

解析原型链

原型链是近原JavaScript这门语言设计的十分有意思的地方之一。在解析原型链之前,型链我们需要了解以下几个重要的近原概念。

构造函数

构造函数是型链一种比较特殊的函数,它通常被人为地约定为函数名的近原首字母需要大写,且必须通过new操作符来进行调用(与普通函数的型链本质上的区别),它的近原作用是用来创建特定类型的对象。在JavaScript中也一些原生的型链构造函数,如Object、近原Array、型链Function等等。近原

实例

每当构造函数被new运算符调用时,型链都会创建出一个新对象,近原这个过程被称为实例化。型链而这个对象就被称为实例。近原也就是说任何对象都是一个实例,但关键在于创建这个实例的构造函数是谁?以及它的b2b供应网原型是谁?

原型

构造函数内部有个特殊的属性prototype,这个属性指向了一个对象,没错它就是原型也称为原型对象。原型对象是一个十分特殊存在,每当构造函数实例化一个对象时,这个实例的[[Prototype]]会默认指向构造函数的prototype。实例对象可以通过自身的[[Porototyoe]]属性找到原型对象,而原型对象可以通过自身的construcor属性找到是哪个构造函数创建了这个实例。(注意许多浏览器会把属性[[Prototype]]替代为属性__proto__。)

构造函数、实例和原型值之间的关系

为了进一步弄清楚构造函数、实例和原型之间的关系,我们可以从下面这张图片开始

实例dog通过自身的[[Prototype]]属性找到了原型Dog.prototype 构造函数Dog通过自身的prototype属性找到了原型Dog.prototype 原型Dog.prototype则通过自身的constructor属性找到了构造函数Dog 实例dog通过constructor属性找到了构造函数Dog。

为实例dog通过constructor属性找到了构造函数Dog这个过程不用实线箭头呢?这里到底有什么细节呢🤔,让我们再来看一段简单的代码和一张图片

function Dog(name){     this.name = name; } let dog = new Dog("cheems"); 

从代码结合图片来看,我们不难发现实例dog上并没有constructor这个属性,而原型对象才拥有这个属性,那么实例是亿华云如何获取到这个属性呢🤔 ,这就涉及到了JavaScript中一种特殊的行为——委托,下面我们就来了解一下什么是委托。

委托

当我们尝试去获取对象的某个属性值,但该对象并没有这个属性时,那么JavaScript 会试着从原型对象中获取属性值。如果那个原型对象也没有该属性,那么再从它的原型中寻找,依次类推直到该过程最后到达终点Object.prototype,如果仍然没有找到就返回undefined。这个过程被称为委托。

现在你就明白了,实例dog正是通过委托这种方式找到了创建自己的构造函数。在明白这一点之后,原型链也就呼之欲出了。

原型链

如果在第一个对象上没有找到需要的属性或者方法引用,引擎就会继续在它的[[Prototype]]指向的对象上进行查找。同理如果后者中也没有找到需要的引用就会继续查找它的[[Prototype]],依次类推直到到达Object.prototype,这一系列对象的链接被称为原型链。

我们可以用一张图来表示下

由于构造函数也是站群服务器对象,所以它同样具有构造函数和原型。构造函数的prototype是实例的原型,并非自身的原型。自定义的构造函数同样需要借助[[Prototype]]找到原型,进而找到创建自己的构造函数——即原生构造函数Function,但请注意原生的构造函数Function的[[Prototype]]是指向了Function.prototype。

console.log(Function.__proto__ === Function.prototype); // true 

所有的原型对象都可以沿着原型链一直寻找至到找到最后的原型对象Object.prototype,然后Object.prototype再往上寻找就是Null,用来表示此处没有对象。

小结

充分了解原型链是理解JavaScipt这门语言重要环节之一,而且对理解JavaScript继承的实现也会有莫大的帮助。如果你已经对原型链梳理的差不多了,下一篇文章我将带你走近JavaScript继承的世界。

最后

有关JavaScript的原型链的分享就到这里了,如果阅读完本篇文章后,你对JavaScript的原型链有了更深一步地理解和认识的话,欢迎给笔者点赞鼓励😄!你们的支持是我继续分享有关JavaScrit知识的动力,谢谢阅读完本篇文章的亲们

本文地址:http://www.bzve.cn/news/5c63099364.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

全站热门

佳能80D8799如何满足摄影爱好者的需求(全面升级的功能与性能,让摄影更具创造力)

PHP安全:MySQL的使用安全

Spring Boot 如何快速集成 Redis 哨兵?

如何阻止针对AI模型的对抗性攻击

Ubuntu或者Debian系统中update-rc.d命令,是用来更新系统启动项的脚本。这些脚本的链接位于/etc/rcN.d/目录,对应脚本位于/etc/init.d/目录。在了解update-rc.d命令之前,你需要知道的是有关Linux系统主要启动步骤,以及Ubuntu中运行级别的知识。复制代码代码如下:复制代码代码如下:按指定顺序、在指定运行级别中启动或关闭复制代码代码如下:实例:update-rc.d apachectl start 20 2 3 4 5 . stop 20 0 1 6 .解析:表示在2、3、4、5这五个运行级别中,由小到大,第20个开始运行apachectl;在 0 1 6这3个运行级别中,第20个关闭apachectl。这是合并起来的写法,注意它有2个点号,效果等于下面方法:复制代码代码如下:A启动后B才能启动,B关闭后A才关闭复制代码代码如下:启动和关闭顺序为90,级别默认复制代码代码如下:修改LINUX默认启动级别# 0 – 停机(千万不要把initdefault设置为0 )# 1 – 单用户模式# 2 – 多用户,但是没有NFS# 3 – 完全多用户模式# 4 – 没有用到# 5 – X11# 6 – 重新启动(千万不要把initdefault设置为6 )# 对各个运行级的详细解释:0 为停机,机器关闭。1 为单用户模式,就像Win9x下的安全模式类似。2 为多用户模式,但是没有NFS支持。3 为完整的多用户模式,是标准的运行级。4 一般不用,在一些特殊情况下可以用它来做一些事情。例如在笔记本电脑的电池用尽时,可以切换到这个模式来做一些设置。5 就是X11,进到X Window系统了。6 为重启,运行init 6机器就会重启。修改级别vi /etc/inittab把id:3:initdefault:中的3改为5就是默认进入图形界面了

Elasticsearch不会DSL没事,来试试SQL吧

4分钟了解什么是SQL窗口函数

网络物理系统安全之​横切安全性之缓解攻击

热门文章

友情链接

滇ICP备2023006006号-39