有什么方法可以表明某个私有方法或属性对于某些类是公共的?例如:
class Parent {
private [but public for Child] childrenContainer: HTMLElement; // сокрытый от всех, но видимый для дочерних
}
class Child {
constructor(){
parent.childrenContainer.appendChild( document.createElement('div') );
}
}
当内部(子但不是继承的)实例需要访问父的私有方法时,这是非常缺乏的。如果没有这种可能性,您必须公开父级的许多私有属性和方法,这对任何人来说都是绝对没有必要的,除了子实例,根据定义,子实例是父级实现的一部分。
这里,在示例中,我只给出了一个属性,可以不泄露地传递给子类,但是经常发生的情况是属性很多,如果传递它们,就会有很多额外的代码。
对于这种情况,Typescript 有一个逃生舱口。您可以使用方括号访问私有属性。
但是,根据我的口味,父方法在这里会更好:
多亏了这个答案,我找到了一个可接受的解决方案,其中私有变为子类的公共。也许有人会派上用场来实现各种列表和类似的结构。使用这种方法,父类的公共接口保持干净,因为您不必将其字段公开给子类。
这种方法有效,因为子类被认为在父类的范围内(在其范围内)。并且随着任何移到外部,它将停止工作。
细微差别是 Child 类在这里被设为静态,因此在编译成 JS 后,它不会每次都在父构造函数中重新创建为属性。