JS系列之一、原型与原型链
一、原型是什么?原型链是什么?
原型是什么?
我们创建的每一个构造函数都有一个prototype(原型)属性。这个属性是一个指针,指向了对象。那么
prototype
就是通过构造函数
创建的实例对象
的原型对象
。这里面有几个关系:构造函数、实例对象、原型对象。可能这时候大家有点迷惑,我们接下来继续往下看。
原型链是什么?
通过
__proto__
的链式调用,最终调用到Object.prototype.__proto__
这个链就是原型链,(参考下图3.1中的蓝色和黑色的链)
二、概念扫盲
构造函数
什么是构造函数呢?相信不用说,只要有些基础都能理解一些,举例说明,我们写一个最简单函数
function Person() { } 复制代码
这里Person
就是一个构造函数 2. 实例对象 有了构造函数
了,我们根据构造函数可以创建几个实例。
const person1 = new Person(); const person2 = new Person(); 复制代码
那么这里person1
、person2
就是两个根据构造函数创建出来的实例对象。 3. 原型对象 了解了什么是构造函数
和实例对象
,我们再回过头读上面的概述prototype就是通过构造函数创建的实例对象的原型对象
,这里重点是实例的原型对象,所以可以理解为一个特别的对象。
三、构造函数、原型对象、实例之间的关系
根据三者之间的关系,梳理关系图如下:
这里需要注意
prototype
是函数特有的属性,__proto__
是对象特有的属性
四、原型相关
prototype
每个函数都有一个 prototype 属性,函数的 prototype 属性指向了一个对象,
这个对象正是
调用该构造函数
而创建的实例的原型
,也就是上面例子中的 person1 和 person2 的原型。
__proto__
这是每一个JavaScript对象(除了 null )都具有的一个属性,叫__proto__,这个属性会指向该对象的原型。
cunstructor
每个原型都有一个 constructor 属性指向关联的构造函数
原型与in操作符
只要通过对象能够访问的属性,就会返回true(说白了就是如果
in
操作符检测的是实例对象自身属性
+原型上的属性
,只有存在就返回true)
function Person() {} Person.prototype.name='我是原型属性'; var person1= new Person(); console.log('name' in person1) // true 复制代码
hasOwnProperty方法
该方法检测一个属性是否存在于
实例对象
中(说白了就是只检测自身的属性
)
function Person() {} Person.prototype.name='我是原型属性'; var person1= new Person(); console.log(person1.hasOwnProperty('name')) // false 复制代码
最后,记录到这里。有问题欢迎指正。
作者:soumsbo
链接:https://juejin.cn/post/7037448666281410597
伪原创工具 SEO网站优化 https://www.237it.com/