js构造函数,原型,原型链

本文探讨JavaScript中的构造函数,解释其首字母大写的原因和内存管理问题。接着介绍了原型对象,指出如何通过prototype属性让所有对象共享方法,以此避免内存浪费。进一步讨论对象原型,说明对象的__proto__属性指向构造函数的prototype。接着阐述查找规则,当对象自身没有方法时,会在原型对象中寻找。最后,解释了原型链的概念,揭示了原型对象的__proto__最终指向object.prototype,并以null结束。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

构造函数

构造函数就是通过new关键字去调用的函数,构造函数是特殊的函数,他的首字母需要大写,他的主要作用主要是为成员变量赋初始值。

 大家都知道构造函数很方便,但是他也有一个问题,就是浪费内存。当我们通过构造函数去创建一个方法(复杂数据类型),它就会单独开辟一个内存空间,所以当我们创建对象时,不仅要为对象创造一个内存空间,还要为每个对象创建单独的内存空间,这就造成了内存浪费。所以我们引入了原型

原型对象

构造函数通过原型分配的函数是所有对象所共享

每一个构造函数都有一个prototype属性,指向另一个对象,注意:这个prototype就是一个对象,这个对象的所有属性和方法,都会被构造函数所拥有.
我们可以将那些不变的方法,直接定义在prototype对象上,这样,所有对象的实例就可以共享这些方法.


由此,将公共方法定义到原型中,就只需要一个内存空间,就不会造成内存浪费。

对象原型

构造函数的每一个对象都可以通过属性_ _proto_ _去指向 构造函数的原型对象prototype

在这里我们做一个实验,看看对象的_ _proto_ _是否等于构造函数的prototype

 我们可以看到返回值为true

查找规则

        首先看自己对象本身有没有这个方法  有的话 执行自己的

        如果没有  就去原型对象查找  找到就可以执行

原型链

既然我们了解了原型,那原型链理解起来就会很简单,我们的对象的_ _proto_ _ 指向构造函数的prototype,那么问题来了,构造函数的原型对象prototype的_ _proto_ _指向的是谁呢?

我们log输出一下就知道了

 

 

由此我们得知原型对象prototype的_ _proto_ _指向的是object.prototype,那我们通过object.prototype._ _proto_ _继续向上找呢?

我们可以看到返回的是null。

通过这种向上寻找形成的链,我们就叫做原型链

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值