答复
如果要使用get
和set
访问器,必须在私有属性前面加下划线.在所有其他情况下,不要使用它.我想说的是,在访问器中使用下划线是一种特殊情况,虽然它不是用Coding guidelines来明确写的,但并不意味着它是错误的.他们在official documentation中使用它.
下划线的原因
首先,我想强调field
和property
之间的区别.在Java或C#等标准高级OOP语言中,field是私有成员,其他类不应看到它.如果您想在考虑封装的情况下公开它,那么应该创建一个属性.
在Java中,你可以这样做(称为Bean properties):
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
device.Id++;
在普通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'.