总览

  • new
  • instanceOf
  • Object.create

    new

  • 语法: newInstance(Fn, …args)

  • 功能: 创建 Fn 构造函数的实例对象

    1. function myNew(Fn, ...args) {
    2. const obj = {};
    3. obj.__proto__ = Fn.prototype;
    4. const result = Fn.apply(obj, args)
    5. // 如果Fn返回的是一个对象类型, 那返回的就不再是obj, 而是Fn返回的对象
    6. return (typeof result === 'object' && result != null) ? result : obj
    7. // 最后一句也可以 return result instanceof Object ? result : obj
    8. }

    instanceof

  • 语法: myInstanceOf(obj, Type)

  • 功能: 判断 ob j是否是 Type 类型的实例
  • 实现: Type 的原型对象是否是 obj 的原型链上的某个对象, 如果是返回 true, 否则返回 false

    1. function myInstanceOf(obj, Type) {
    2. let proto = Object.getPrototypeOf(obj)
    3. while(proto) {
    4. if (proto === Type.prototype) {
    5. return true
    6. }
    7. proto = Object.getPrototypeOf(proto)
    8. }
    9. return false
    10. }

Object.create

Object.create() 方法创建一个新对象,使用现有的对象来提供新创建的对象的proto

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

使用:

  1. // 子类继承父类的原型属性
  2. Worker.prototype = Object.create(Person.prototype)
  3. Worker.prototype.constructor = Worker