Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
typescript派生类不能具有相同的变量名?_Typescript - Fatal编程技术网

typescript派生类不能具有相同的变量名?

typescript派生类不能具有相同的变量名?,typescript,Typescript,为什么typescript派生类不能有相同的变量名?甚至这些成员都是私人的。还有别的选择吗,还是我做错了什么 class ClassTS { private nom: string = "ClaseTS"; constructor() { } } class ClassTSDer extends ClassTS { private nom: string = "ClassTS&

为什么typescript派生类不能有相同的变量名?甚至这些成员都是私人的。还有别的选择吗,还是我做错了什么

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并没有任何困难,它是有效的:谢谢你的回答,我认为我做错了什么。或者可能有一个保留的词,你的解释简短,简单,非常有用谢谢你的时间。谢谢你的回答,我认为我做错了什么。或者可能有一个保留字,你说…编译器不会抱怨受保护的。。。我不知道谢谢你的时间