JS寄生组合式继承的实现

 

复制代码
/**
 * 对传入的对象进行一次浅复制
 * (将被传入的对象复制给这个构造函数的原型)
 */
function object(o) {
  function F() {}
  F.prototype = o;
  return new F();
}

/**
 * 继承父类圆形,然后返回新对象赋值给子类原型(寄生组合)
 */
function inheritPrototype(subType, superType) {
  // 创建父类原型的副本
  const prototype = object(superType.prototype);
  // 将副本的原型的构造器指向子类
  prototype.constructor = subType;
  // 将子类的原型指向父类的副本
  subType.prototype = prototype;
}

/* 寄生组合式继承 */

function SuperType(name) {
  this.name = name;
  this.colors = ['red', 'blue', 'green'];
}

SuperType.prototype.sayName = function() {
  console.log(this.name);
};

function SubType(name, age) {
  SuperType.call(this, name);
  this.age = age;
}

inheritPrototype(SubType, SuperType);
SubType.prototype.sayAge = function() {
  console.log(this.age);
};
复制代码

 

posted @   樊顺  阅读(68)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示