原型、原型链
❤️

原型、原型链

🤔
原型链必会

 
原答案:
  • 原型:声明一个函数,JS 引擎会自动给这个函数添加一个 prototype 属性,这个属性会对应一个对象,这个对象就是原型对象,也成原型
  • 原型链:从一个实例对象通过 __proto__ 属性往上找构造这个实例相关联的原型对象,这个原型对象又会有构造它的原型对象,同样也是通过 __proto__ 这个属性,以此类推,这条链就是原型链

 
参考:
notion image
掌握并理解构造函数、实例、原型对象的关系
 

1. instanceof 的原理

instanceof 的原理就是使用了原型链
notion image
const a = [];
a instanceof Array; // true
a.__proto__ === Array.prototype // true
就是判断 a__proto__ 属性是否与 Arrayprototype 相等,不相等,则继续通过 __proto__ 往上找继续判断

2. new 运算符的原理

  1. new 关键字首先会创建一个空对象
  1. 将这个空对象的原型对象指向构造函数的原型属性,从而继承原型上的方法
  1. this 指向这个空对象,执行构造函数中的代码
  1. 如果构造函数返回了一个对象 res,就将该返回值 res 返回,如果返回值不是对象,就将创建的对象返回
function myNew(fn, ...args) {
	const obj = Object.create(fn.prototype);
	const res = fn.call(obj, ...args);
	return res instanceof === 'object' ? res : obj;
}