本文是自己对原型链的一些粗略理解,希望能帮到各位,如有不正确的地方欢迎评论指正!
原型链
原型对象
prototype
: 显式原型__ proto__
: 隐式原型
- 每个构造函数都有一个
prototype
属性指向这个函数的 原型对象。 - 每个实例都会有一个
__proto__
属性,这个属性会指向该其 构造函数 的 原型对象。 - 每个原型对象都有一个
constructor
属性,指向该关联的构造函数。
构造函数的prototype
和其 实例 的__proto__
是指向同一个地方,构造函数的原型对象。
// 构造函数
function Person(){}
// 实例化
let obj = new Person();
// 实例对象是通过 __proto__来指向 原型对象
console.log(obj.__proto__ === Person.prototype); // true
构造函数也是函数,也是构造函数 Function
的实例,所以构造函数也有 __proto__
属性,指向 构造函数Function
的原型对象
构造函数的原型对象 和 构造函数 Function
的原型对象,它们的本质都是对象,它们的 __proto__
属性都会指向 构造函数Object
的原型对象。
function Person(){}
console.log(Person.prototype.__proto__ === Object.prototype) // true
console.log(Function.prototype.__proto__ === Object.prototype) // true
Object.prototype
其实也有__proto__
,指向null,这是原型链的终点
什么是原型链呢?其实说就是:__proto__ 的路径
就叫原型链 ,
instanceof
使用方法: A instanceof B
作用:判断B的prototype是否在A的原型链上
// 构造函数
function Person(name) {
this.name = name
}
const person = new Person('菇太帷') // 实例
console.log(Person instanceof Function) // true
console.log(Person instanceof Object) // true
console.log(person instanceof Person) // true