一次性搞定原型链

121 阅读2分钟

原型链类自查清单

  • 创建对象的几种方法

  • 原型、构造函数、事例、原型链

  • instanceof原理

  • new运算符

对象的3种常见的创建方式:

  1. 【字面量】默认对象的原型链指向object
  2. 【显式构造函数创建对象】
  3. 【object.create】创建的对象由原型链来链接的

原型、构造函数、事例

只有函数才会有prototype属性
也只有实例对象才有__proto__,函数也是对象所以也有该属性

原型链

从当前的实例对象向上找构造这个实例的相关连对象,这个相关连的实例对象向上找又有创造它的相关联的对象,这样一层一层的找,直到找到objet.prototype。

原型链的基本原理就是:每个实例对象都可以通过原型链找到它的原型对象,这个原型对象所具备的方法和属性都是被这个实例对象所共享的

instanceof原理

instanceof本质上是判断实例对象的__proto__和构造函数的prototype引用的是不是一个地址。

A instanceof B:判断B的prototype是否在A的原型链上

tips:当前实例对象原型链上的构造函数都将返回true,要想判断当前的构造函数是否是当前实例对象的构造函数,引用constructor来判断

new运算符

  1. 一个新对象被创建。它继承自foo.prototype

  2. 构造函数foo被执行。执行的时候,相应的传参会被传入,同时上下文(this)会被指定为这个新实例。new foo等同于new foo(),只能用在不传递任何参数的情况

  3. 如果构造函数返回了一个“对象”,那么这个对象就会取代整个new出来的结果。如果构造函数没有返回对象,那么new出来的结果为步骤1创建的对象

    var new = functiom(func) { var fn = Object.create(func.prototype) var k = func.call(fn) return typeof k === 'object' ? k : fn }

参考文档:

1. coding.imooc.com/class/chapt… 慕课

2. juejin.cn/post/700741…

3. juejin.cn/post/700852…