Erik Cupal..
20
回答
如果要使用get和set访问器,则必须在私有属性前加下划线.在所有其他情况下不要使用它.我会说使用下划线和加速器是一种特殊情况,尽管它没有明确地用编码指南编写,但这并不意味着它是错误的.他们在官方文档中使用它.
下划线的原因
对于开始,我想强调的区别field和property.在Java或C#等标准高级OOP语言中,field是一个私有成员,对其他类不应该是可见的.如果要在考虑封装的情况下公开它,则应创建属性.
在Java中,你这样做(它被称为Bean属性):
private int id;
public int getId() {
return this.id;
}
public setId(int value) {
this.id = value;
}
然后,您可以通过调用以下方法来访问该属性:
int i = device.getId();
device.setId(i);
//increment id by 1
device.setId(device.getId() + 1);
另一方面,C#的设计使得使用属性更加容易:
private int id;
public int Id {
get {
return this.id;
}
set {
this.id = value;
}
}
(值始终是指定的值.)
您可以直接为这些属性指定值或获取属性值.
int i = device.Id;
device.Id = i;
//increment id by 1
i
在纯JavaScript中,没有真正的字段,因为类成员总是公开的; 我们简单地称它们为属性.
在TypeScript中,您可以定义"真正的"类C#属性(使用封装).你使用Accessors.
private _id: number;
public get id(): number {
return this._id;
}
public set id(value: number) {
this._id = value;
}
用法:
let i: number = device.id;
device.id = i;
//increment id by 1
device.id++;
你必须在这里使用下划线,原因有两个:
在JavaScript中,所有类成员都是公共的.因此,通过在私有属性之前加上下划线,我们签名,此属性(字段)是私有的,只能由它的公共属性访问.
如果您使用相同名称命名私有属性和公共属性,则JavaScript解释器将不知道是访问私有属性还是公共属性.因此,您得到了您正在撰写的错误:[ts]重复的标识符"id".