原型和原型链

构造函数、实例、和原型对象的关系
在这里插入图片描述

  1. 每次创建js函数时,js都会为函数对象默认添加一个称为prototype的额外属性,它指向原型对象,可以用来访问原型对象。

  2. 然后当我们从Function 对象中创建实例的时候,js引擎会再次向该对象的实例添加_ _proto_ _ 属性。它也可以用于访问Function 对象的同一原型对象。

  3. 构造函数(Function对象)的原型对象在所有使用该函数创建的实例对象中共享,将方法和属性添加到此原型对象,这些方法和属性将自动用于其构造函数的实例。(在构造函数实例中的__proto__属性中)

  4. prototype属性是一个默认情况下 " 拥有constructor属性的对象 " (也就是原型对象)
    也可以说函数对象的prototype属性指向的就是原型对象

prototype指向原型对象(显示原型) constructor指向拥有指向它prototype属性的函数对象

实例的原型属性__ proto__(隐式原型)和函数function的prototype属性指向同一对象(原型对象)。

原型链的定义和继承

对象的原型,也是个对象。只要对象的原型有值,不为null,他就还有原型。所以构成了原型链。
另一种详细理解 : 假如有一个构造函数,然后创建了该构造函数的实例,那么这个被创建出来的函数就会继承构造函数的属性,假如实例的某个属性并未在自身函数内找到,那么它就会往上查找,直到查找到prototype指向null时停止,并返回未声明错误,那么在这个查找的过程层层向上查找的关系就叫做原型链。
总结来说就是:每个被创建的对象都将从其原型链上继承它所寻找到的方法和属性。
可以往原型链上添加属性和方法 ,从而手写原型链继承。



拓展:当一个实例调用某个方法时,它先去自己所属类型的原型链上依次去寻找对应方法,最后才去Object的原型对象
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值