原型链是js基础比较重要的一个环节;
-
提到原型链有三个比较重要的概念: 实例 构造函数 以及 原型对象,其中三者的关系:
构造函数new
=》 创建一个实例;
构造函数prototype
=》原型对象;
同时 原型对象constructor
=》 构造函数;
实例__proto__
=> 原型对象; -
new 运算符是如何工作的
- 先创建一个空对象;
- 将构造函数内部的this指向这个新建的空对象,让其继承构造函数内部属性和方法
- 将构造函数原型对象指向这个空对象的,继而实现其继承构造函数原型上的属性和方法
-
instanceof 原理和 js手写一个instanceof的方法
instanceof原理:判断一个构造函数的实例的__proto__ 方法 和 构造函数的prototype 是不是指向相同的原型对象
这也就暴露了instanceof 一个缺点 因为原型链顶层是Object 直到 null
所以js如何实现类似于instanceof的方法?
function _instanceof(_instance, _func) { let left = _instance.__proto__ let right = _func.prototype while (true) { if (left === null) return false if (left === right) return true left = left.__proto__ } }