【发布时间】:2019-04-26 10:13:36
【问题描述】:
在class 中,我如何访问其基类的私有字段,比如#property?
class Base {
#property = '1.618'
toString() {
return Base.name
}
}
class X extends Base {
thisWorks() {
return super.toString()
}
toString() {
return super.#property // SyntaxError: Unexpected private field
}
}
console.log(`${new X}`)
【问题讨论】:
-
我认为这是不可能的。从面向对象的角度来看,它需要受到保护或公开才能访问。
-
仅供参考,受保护的成员访问是可行的,我实际上做过一次实验,但它非常笨拙并且性能受到影响。基本上是一个用于构建一个类的包装器,该类在原型对象上提供函数和属性,然后对其进行弱映射并针对每个方法名称的 getter 中的 function.caller 进行检查,但是 function.caller 现在已被弃用,看起来不会有替代品
标签: javascript oop private superclass ecmascript-next