寄生组合式继承

寄生组合式继承(Parasitic Combination Inheritance)是 JavaScript 中实现继承的一种方式,它结合了组合继承和寄生继承的优点,同时避免了组合继承中的性能问题。组合继承会导致父类构造函数被调用两次,而寄生组合式继承通过使用原型链来避免这一问题。

下面是寄生组合式继承的实现步骤:

定义父类和子类。

创建父类原型的一个副本,并将其赋值给子类的原型。

修正子类的构造函数指针。

给子类添加一个调用父类构造函数的函数,并传递相应的参数。

js 复制代码
// 父类构造函数
function Parent(name) {
  this.name = name;
  this.colors = ['red', 'blue', 'green'];
}

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

// 子类构造函数
function Child(name, age) {
  Parent.call(this, name); // 继承实例属性,第一次调用 Parent 构造函数
  this.age = age;
}

// 创建父类原型的副本
function inheritPrototype(child, parent) {
  let prototype = Object.create(parent.prototype); // 创建对象
  prototype.constructor = child; // 增强对象
  child.prototype = prototype; // 赋值对象
}

// 继承父类的原型方法
inheritPrototype(Child, Parent);

Child.prototype.sayAge = function() {
  console.log(this.age);
};

// 测试代码
const child1 = new Child('Alice', 18);
child1.sayName(); // 输出: Alice
child1.sayAge(); // 输出: 18
child1.colors.push('black');
console.log(child1.colors); // 输出: ['red', 'blue', 'green', 'black']

const child2 = new Child('Bob', 20);
child2.sayName(); // 输出: Bob
child2.sayAge(); // 输出: 20
console.log(child2.colors); // 输出: ['red', 'blue', 'green']
相关推荐
捻tua馔...3 分钟前
antd3的表单实现(HOC解决方案)
前端·javascript·react.js
AllinLin15 分钟前
JS中的call apply bind全面解析
前端·javascript·vue.js
POLITE321 分钟前
Leetcode 438. 找到字符串中所有字母异位词 JavaScript (Day 4)
javascript·算法·leetcode
创思通信22 分钟前
STM32F103C8T6采 DS18B20,通过A7680C 4G模块不断发送短信到手机
javascript·stm32·智能手机
zhougl99626 分钟前
vue中App.vue和index.html冲突问题
javascript·vue.js·html
止观止27 分钟前
告别全局污染:深入理解 ES Modules 模块化与构建工具
javascript·webpack·vite·前端工程化·es modules
千寻girling1 小时前
面试官: “ 请你讲一下 package.json 文件 ? ”
前端·javascript·面试
如果你好1 小时前
解决深拷贝循环引用痛点:一篇看懂 WeakMap 实现方案
前端·javascript
han_1 小时前
前端性能优化之性能指标篇
前端·javascript·性能优化
爱生活的苏苏1 小时前
修改默认滚动条样式
开发语言·javascript·ecmascript