gpt4 book ai didi

javascript - 在 ES6 中,如何覆盖父类(super class)中的私有(private)方法?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:58:19 25 4
gpt4 key购买 nike

我正在学习 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com