原型链剖析

原型链是一个经常被提起的概念,也是前端必备的知识,要想弄明白什么是原型链,首先要有对象的基本认知。

在javascript中,万物皆为对象,对象就好像一个容器,里面包含了属性和方法。

比如基本数据类型(number,string,boolean) 引用数据类型(object,array,deta,function)都可以成为对象,因为他们都有属于自己原生的属性和方法。

JS规定,所有的对象都有自己的原型对象,通过prototype来访问。

再来介绍三个兄弟 — 构造函数,原型对象,实例对象

构造函数:用来初始化新创建的对象的函数,可以制定属性和方法,内有一个prototype属性,该属性指向实例对象的原型对象

原型对象:当创建了一个构造函数A,会在内存中创建一个对象B,A通过prototype来访问B,这个B就是A的原型对象,A有一个属性constructor来返回创建B的构造函数

实例对象:通过new 构造函数而来,new新的意思,相当于复制了一个新的构造函授,具有了构造函数的属性和方法。每个实例对象都有一个属性constructor来指向所属的构造函数,还有一个__proto__属性,用来访问原型对象

在这里插入图片描述

OK通过介绍就大概了解了这三兄弟的关系,实例对象通过构造函数而来,他两都能访问原型对象,接下来就牵引出原型链。

JS的继承机制是通过原型对象实现,原型对象定义实例对象共享的属性和方法

这是一个三者基本的关系,而实例对象的属性方法是继承来的,如果他的原型对象没有,会继续往上找,一层一层直到null,没有就返回undefined
在这里插入图片描述
这就是所谓的原型链

拓展知识:instanceof 用来判断对象是否是某个类或者构造函数的实例,返回布尔值

function Per(){}
let p = new Per()
p instanceof Per //true 

版权声明:本文为weixin_28686261原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。