Object.create


思路:将传入的对象作为原型

1
2
3
4
5
function create(obj) {
function F() {}
F.prototype = obj
return new F()
}

instanceof

instanceof 运算符用于判断构造函数的 prototype 属性是否出现在对象的原型链中的任何位置。

实现步骤:

  1. 首先获取类型的原型
  2. 然后获得对象的原型
  3. 然后一直循环判断对象的原型是否等于类型的原型,直到对象原型为 null,因为原型链最终为 null
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function myInstanceof(left, right) {
     let proto = Object.getPrototypeOf(left), // 获取对象的原型
         prototype = right.prototype; // 获取构造函数的 prototype 对象

     // 判断构造函数的 prototype 对象是否在对象的原型链上
     while (true) {
       if (!proto) return false;
       if (proto === prototype) return true;

       proto = Object.getPrototypeOf(proto);
    }
    }