原型与原型链简介

前言

最近看了好多文章,让我感觉作为一个前端,如果不了解原型和原型链的话就不是一个好前端(我就不是个好前端😭)!
这篇算是写给自己的笔记吧,这个概念还是蛮难融会贯通的。欸~我到现在也还是一知半解啊。(发愁)

1、原型
我们创建的每个函数都有一个prototype(原型)属性,在默认情况下,所有原型对象都会自动获得一个constructor(构造函数)属性,这个属性包含一个指向prototype属性所在函数的指针。例子:

function Person() {} // 创建一个函数
Person.prototype.constructor = Person // Person就是prototype属性所在函数

当调用构造函数创建一个实例时,该实例的内部就会包含一个指针,指向构造函数的原型对象,例子:

function Person() {} // 创建一个函数
let person1 = new Person()  // 创建一个实例
person1.__proto__ === Person.prototype // true

2、原型链
原型对象 = 另一个类型的实例
因为实例中包含一个指向原型对象的指针,所以如果让一个原型对象等于另一个类型的实例,此时的原型对象将包含一个指向另一个原型的指针,相应地,另一个原型中也包含着一个指向另一个构造函数的指针。如此层层递进,就构成了实例与原型的链条。这就是所谓原型链的基本概念。例子:

function A () {
    this.a = true
}

A.prototype.getA = function () {return this.a}

function B  ()  {}

B.prototype = new A() // B的原型指向A的实例

let b = new B() // b是B的实例

b.getA() // true

此时,

b. __proto__ = B.prototype
// B.prototype指向了A的实例,所以B的原型对象不是默认的了,也没有默认的 constructor
b. __proto__. __proto__ = A.prototype

这个概念原本是打算在网上看博客的,但是发现很多博客写的并不是很严谨,无赖之下只好自己看JS高程。强烈建议各位如果方便的话,最好直接去看JS高程第六章面向对象的程序设计,比大部分博客好理解,而且知识体系介绍的也比较全面,超级赞!
如果有什么不理解的地方欢迎讨论,一起加油吧~💪
本文参考JavaScript高级程序设计(第3版)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容