javascript - ES6 : Accessing static member variables in classes created from Mixin

标签 javascript ecmascript-6 es6-class ecmascript-next

<分区>

我根据 MDN 的官方示例创建了一个类( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes )

这是我的代码

class A {
}

const Mixer = BaseClass => class extends BaseClass {
    static val = 10;
}

class B extends Mixer(A) {
    myMethod() {
    // Need some way to access the static member "val"
    }
}

如何访问“val”?

如果没有 mixin(即 B 类扩展了 A,并且 val 在 A 类中是静态的)我可以完成“A.val”。

在这种情况下,Mixer.val 不起作用,并且根据我的理解,B 从匿名类扩展而来,因此无法通过名称访问父类(super class)。

编辑:我提错了问题。我真正的问题是在 Mixer 本身中访问 val。正如我的答案所指出的那样,在 B 中访问 val 非常简单。

例如

const Mixer = BaseClass => class extends BaseClass {
    static val = 10;
    myMethod2() {
        // log the val member
    }
}

最佳答案

这已经在 SO 上讨论过无数次,但这个案例可能需要一些解释。通常,可以使用 this.constructor 从实例方法访问静态属性和方法:

class B extends Mixer(A) {
    myMethod() {
      console.log(this.constructor.val);
    }
}

其中 this.constructor === B,但这在继承自 B 的类中不是这样。

没有理由在B中直接引用父匿名类,因为val是通过原型(prototype)链继承自它的。这就是类继承的目的。

关于javascript - ES6 : Accessing static member variables in classes created from Mixin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46503113/

相关文章:

javascript - Promise.finally 没有作为链的最后一次调用返回

json - 如何通过 es6 语法使用 chai json 模式

typescript - 使用解构/扩展在 TypeScript 中复制具有重命名属性的对象

javascript - 如何在提交表单时使用 javascript 禁用页面内容

javascript - 计算 Prop 无法正常工作 Vue JS 2

javascript - 使用 Web 扩展(附加组件)的 content_scripts 中的 ES 模块

javascript - ES6 将对象传递给构造函数并设置属性

Node.js - ES6 模块导入到 Node.js 'require'

javascript - 通过循环类(原型(prototype))属性使 Mixins 工作

javascript - jquery 插件设置 this 的值