javascript - 使用数组应用多个 mixin

标签 javascript ecmascript-6

使用 ES6 有没有办法应用数组中定义的多个 mixin? mixins 的定义如下:

const mixins = Array('Mixin', 'Mixin2');

然后创建一个 mixin:

export const Mixin = function (superClass) {
return class extends superClass {}

并将 mixin 与以下内容一起使用:

export class MyClass extends MultipleMixins(BaseClass)

最佳答案

您可以在 mixins 数组上使用 reduce(),传入基类并不断返回新的混合类。这将按顺序应用所有混合:

class BaseClass {
  constructor(name) {
    this.name = name
  }
}

// adds an uppercase
const Mixin = function(superClass) {
  return class extends superClass {
    get uppercase() {
      this.name = this.name.toUpperCase()
      return this
    }
  }
}

//adds a reverse
const Mixin2 = function(superClass) {
  return class extends superClass {
    get reverse() {
      this.name = [...this.name].reverse().join('')
      return this
    }
  }
}

let mixins = [Mixin, Mixin2]

let MixedClass = mixins.reduce((base, mix) => mix(base), BaseClass)

let instance = new MixedClass('mark')
// use the new methods
console.log("reversed & uppercase:", instance.uppercase.reverse.name)

关于javascript - 使用数组应用多个 mixin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53055250/

相关文章:

javascript - Javascript 和 P5.js - 优化 4D 投影代码

javascript - 如何在类里面编写 Mocha 测试

JavaScript : Dedup 2 dimensional array by single column

javascript - 自动绑定(bind)JS类方法有什么好方法?

javascript - 在 JavaScript 中创建新日期时的奇怪行为

javascript - 如何在 react js 中动态更改网站的标题(也在源代码中)?

javascript - 如何让颜色一次出现一个? (

javascript - 在html中自动翻译网页

javascript - 使用 DOM 在字母中拆分单词的最佳方法

javascript - 如何用内部对象构造对象