如何在JavaScript中访问超类的私有成员?

如何在JavaScript中访问超类的私有成员?,javascript,oop,private,superclass,ecmascript-next,Javascript,Oop,Private,Superclass,Ecmascript Next,在类中,如何访问其基类的私有字段,比如属性 阶级基础{ 属性='1.618' 托斯特林{ 返回Base.name } } 类扩展了基{ 这个作品{ 返回super.toString } 托斯特林{ return super.property//SyntaxError:意外的私有字段 } } console.log`${new X}`在OOP中,即使在扩展时,也不能访问类之外的私有方法或属性。但您可以在子类中访问父类的受保护方法。在OOP中,即使在扩展时,您也不能访问类外的私有方法或属性。但您可

在类中,如何访问其基类的私有字段,比如属性

阶级基础{ 属性='1.618' 托斯特林{ 返回Base.name } } 类扩展了基{ 这个作品{ 返回super.toString } 托斯特林{ return super.property//SyntaxError:意外的私有字段 } } console.log`${new X}`在OOP中,即使在扩展时,也不能访问类之外的私有方法或属性。但您可以在子类中访问父类的受保护方法。

在OOP中,即使在扩展时,您也不能访问类外的私有方法或属性。但您可以在子类中访问父类的受保护方法。

它是:

这意味着私有字段纯粹是内部的:类外的JS代码无法检测或影响所述类实例的任何私有字段的存在、名称或值,而无需直接检查该类的源,除非该类选择公开它们。这包括子类和超类

Base必须以其他方式故意公开其属性,例如通过方法。

它是:

这意味着私有字段纯粹是内部的:类外的JS代码无法检测或影响所述类实例的任何私有字段的存在、名称或值,而无需直接检查该类的源,除非该类选择公开它们。这包括子类和超类


Base必须以其他方式故意公开其属性,比如通过方法。

是的,但是这个问题是关于JavaScript中的属性的,它没有受保护的属性,只是被随意称为privateWell。据我所知,JavaScript中不可能有受保护的方法或属性。但是您可以在标识符前面简单地“uz”签名以将其标识为私有,但仍然可以在类之外访问它。是的,但是这个问题是关于JavaScript中的-properties的,据我所知,它没有受保护的,只是随意地被称为privateWell。在JavaScript中,您不可能有受保护的方法或属性。但是你可以在标识符前面简单地“u”签名,将它标识为私有的,但是仍然可以在类之外访问它。我认为这是不可能的。从面向对象的角度来看,它需要被保护或公开才能被访问。仅供参考,受保护的成员访问是可行的,我实际上做过一次实验,但它非常笨拙,性能受到影响。基本上是一个包装器,用于构建一个类,该类在原型对象上提供函数和属性,然后根据每个方法名称的getters中的function.caller对其进行弱映射和检查。然而function.caller现在已被弃用,看起来不会有替换。我认为这是不可能的。从面向对象的角度来看,它需要被保护或公开才能被访问。仅供参考,受保护的成员访问是可行的,我实际上做过一次实验,但它非常笨拙,性能受到影响。基本上是一个包装器,用于构建一个类,该类在原型对象上提供函数和属性,然后对每个方法名的getter中的function.caller进行弱映射和检查,但是function.caller现在已被弃用,看起来不会有替换。为什么要这样设计,特别是为什么要排除子类?我很确定这是为了封装,请看-每个类都可以有自己的私有属性,甚至与超类上的私有属性同名,没有冲突。很有趣,谢谢。确实没有冲突,但登录到控制台后看起来有点奇怪:{property:1,property:2}。然而,我可以看到这是如何阻止通过蛮力发现类的私有属性的名称的。为什么要这样设计,特别是为什么要排除子类?我很确定这是为了封装,请看-每个类都可以有自己的私有属性,甚至与超类上的私有属性同名,没有冲突。很有趣,谢谢。确实没有冲突,但登录到控制台后看起来有点奇怪:{property:1,property:2}。然而,我可以看到这是如何防止通过暴力发现类的私有属性的名称的