6.原型和原型链

本文详细解释了JavaScript中的原型和原型链概念,包括原型对象的作用、如何实现继承,以及__proto__属性在查找属性时的链式结构,最后指出原型链的尽头是functionObject的原型对象指向null。
摘要由CSDN通过智能技术生成
1.原型

每个函数都有一个 prototype 的属性,称之为原型,因为 prototype 是个对象,又称为原型对象。

作用:

  • 存放一些属性和方法。

  • 在 JS 中实现继承。

比如:

const arr = new Array(1, 2, 3);
arr.reverse();
arr.sort();

为什么创建一个数组以后就可以使用 reverse(),sort()或者其他方法?

因为 Array 构造函数也是一个函数,而函数就会有一个原型对象 Array.prototype,而 JS 在这个原型对象上挂载了很多的方法,所以在使用构造函数 Array 创建实例 arr 的时候,arr 就可以使用 Array。prototype 上的这些方法。

至于为什么实例 arr 可以使用构造函数 Array 原型对象 prototype 上的方法,就要牵扯到原型链。

2.原型链

每个对象都有一个属性叫 __proto__。

作用:

  • 这个属性会指向它的构造函数的原型对象。

const arr = new Array(1, 2, 3);
arr.reverse();
arr.sort();
console.log(arr.__proto__ === Array.prototype); // true

前面说为什么实例 arr 可以使用构造函数 Array 原型对象 prototype 上的方法,就是因为有这个__proto__ 存在。当访问一个对象的某个属性时,会先在这个对象本身属性上查找,如果没有找到,则会通过它的__proto__属性,找到它的构造函数原型对象,如果还没有找到就会再在其构造函数prototype__proto__中查找,这样一层一层向上查找就会形成一个链式结构,我们称为原型链

注意:如果通过实例对象__proto__属性赋值,则会改变其构造函数原型对象,从而被所有实例所共享。

构造函数 Person 创建的实例 person,person 的 __proto__ 属性指向 Person.prototype,而 Person.prototype 也是一个对象,Person.prototyp. __proto__ 就会指向 Person 的构造函数也就是 Object 的原型对象 Object.prototype,这就是说,person 可以通过 __proto__ 去访问 Person.prototype上的属性,如果 Person.prototype 上面没有想要的东西,就再去更高一层的 Object.prototype 上面找,直到找到 null 没有为止,原型链的尽头是 null。

3.原型链的尽头

所有的原型对象的 __proto__ 属性都是指向 function Object原型对象。 而function Object原型对象是不存在__proto__这个属性的,它指向了null。我们就得知了原型链的尽头是null

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值