typescript派生类不能具有相同的变量名?
为什么typescript派生类不能有相同的变量名?甚至这些成员都是私人的。还有别的选择吗,还是我做错了什么typescript派生类不能具有相同的变量名?,typescript,Typescript,为什么typescript派生类不能有相同的变量名?甚至这些成员都是私人的。还有别的选择吗,还是我做错了什么 class ClassTS { private nom: string = "ClaseTS"; constructor() { } } class ClassTSDer extends ClassTS { private nom: string = "ClassTS&
class ClassTS {
private nom: string = "ClaseTS";
constructor() {
}
}
class ClassTSDer extends ClassTS {
private nom: string = "ClassTS";
constructor() {
super();
}
}
我在练习TS时发现了这个
类“ClassTSDer”错误地扩展了基类“ClaseTS”。类型
单独声明私有财产“nom”。ClassTSDer
类
你可以,使用受保护的;是的,但是如果我不想使用受保护的,我必须使用其他名称吗?属性必须有不同的名称
请记住,在运行时,JavaScript类实例只是对象,而对象只是从键到值的映射。属性名称是键,不能有两个同名的不同键。属性必须有不同的名称 如果您查看生成的ES5代码,您会发现在子类上声明与父类同名的私有属性将覆盖父类,从而破坏封装
/**
*班级
*/
var ClassTS=(函数(){
函数类{
this.nom=“ClaseTS”;
}
ClassTS.prototype.someMethod=函数(){
console.log(this.nom);
};
返回类;
}());
/**
*ClassTSDer
*/
var ClassTSDer=(函数(_super){
__扩展(ClassTSDer,_super);
函数ClassTSDer(){
_超级。打电话(这个);
this.nom=“ClassTS”;
}
ClassTSDer.prototype.childMethod=函数(){
_super.prototype.someMethod.call(this);
};
返回类顺序;
}(类别);;
在这种情况下,对于在子属性中调用的来自父函数的任何函数,将导致this.nom的值为“ClassTS”,而不是私有属性中的“ClaseTs”
编译器不会抱怨受保护的属性(即使它们生成相同的ES5代码),因为封装的期望已经不存在了。不是“虽然”,而是因为存在私有的u不能有相同的名称。你想覆盖私有属性(与父类具有相同属性的子类总是想覆盖它)。“你可以使用protected”=>我在父类和子类中将它设置为public并没有任何困难,它是有效的:谢谢你的回答,我认为我做错了什么。或者可能有一个保留的词,你的解释简短,简单,非常有用谢谢你的时间。谢谢你的回答,我认为我做错了什么。或者可能有一个保留字,你说…编译器不会抱怨受保护的。。。我不知道谢谢你的时间