我正在学习 ES6 中的类...
我想以某种形式使用私有(private)属性,以便只能从类的实例中调用某些方法。
例如使用 Symbol...
/* A.js */
const _privateMethod = Symbol('_privateMethod')
class A {
[_privateMethod]() {
return 'yup'
}
do() {
return this[_privateMethod]()
}
}
const a = new A()
a.do() /* yup */
..._privateMethod 不能直接调用。到目前为止一切顺利。
但是,我想知道如何在继承自 A 的类中覆盖 _privateMethod。例如,以下内容将不起作用:
/* B.js */
const _privateMethod = Symbol('_privateMethod')
class B extends A {
[_privateMethod]() {
return 'nope'
}
}
const b = new B()
b.do() /* yup */
建议如何执行此操作?
最佳答案
再次调用 Symbol('_privateMethod')
会创建一个新的、不同的符号(即使它具有相同的描述)。您正在使用不同的 key 创建不同的方法,而不是覆盖原始方法。
您将需要使用完全相同的相同 符号来定义子类中的方法。您可以从 Object.getOwnPropertySymbols(A.prototype)
获取它或者通过将 _privatMethod
符号作为常量从 A.js 导出并将其导入 B.js(与 class A
一起)。但是,如果您想使该类可扩展,我建议您根本不使用符号。
关于javascript - 在 ES6 中,如何覆盖父类(super class)中的私有(private)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48509267/