import mix from './mix';
import isFunction from './is-function';

const extend = function (subclass, superclass, overrides?, staticOverrides?) {
  // 如果只提供父类构造函数，则自动生成子类构造函数
  if (!isFunction(superclass)) {
    overrides = superclass;
    superclass = subclass;
    subclass = function () {};
  }

  const create = Object.create
    ? function (proto, c) {
        return Object.create(proto, {
          constructor: {
            value: c,
          },
        });
      }
    : function (proto, c) {
        function Tmp() {}
        Tmp.prototype = proto;
        const o = new Tmp();
        o.constructor = c;
        return o;
      };

  const superObj = create(superclass.prototype, subclass); // new superclass(),//实例化父类作为子类的prototype
  subclass.prototype = mix(superObj, subclass.prototype); // 指定子类的prototype
  subclass.superclass = create(superclass.prototype, superclass);
  mix(superObj, overrides);
  mix(subclass, staticOverrides);
  return subclass;
};

export default extend;
