我有一个秒表方法,它有几个属性,我不希望任何人能够从类外访问它们,我把它们设为私有的,但是仍然可以访问它们,并且它们的值可以更改,我该怎么做?
class StopWatch {
private duration: number = 0;
private status: string = 'stopped';
private currentTime: number = 0;
start () {
if (this.status == 'started') {
throw new Error("already started!");
}
this.currentTime = Date.now();
this.status = "started";
}
stop() {
if (this.status == "stopped") {
throw new Error("already stopped!");
}
this.duration = Date.now() - this.currentTime + this.duration;
this.status = "stopped";
console.log((this.duration / 1000).toFixed(1));
}
reset() {
if (this.status == 'started') {
this.stop();
}
this.duration = 0;
}
}
const obj = new StopWatch();
1条答案
按热度按时间mepcadol1#
正如Hrusikesh在问题注解中指出的,TypeScript可见性修饰符只在编译时执行,在运行时,类成员总是像任何JavaScript对象属性一样可访问:
与TypeScript类型系统的其他方面一样,
private
和protected
仅在类型检查期间实施。但是现在有了JavaScript类private features:只要在成员名前面加上一个hash(
#
),它就真的是"私有的",也就是说,即使在编译之后,也不能从类的外部访问,因为它是由JavaScript强制执行的:Playground链接