在 Javascript 中,我可以使用 get/set 方法创建对象的属性:
function Field(arg){
var value = arg;
// Create a read only property "name"
Object.defineProperty(this, "value", {
get: function () {
return value;
},
set: function () {
console.log("cannot set");
}
});
}
var obj = new Field(10);
console.log(obj.value); // 10
obj.value = 20; // "cannot set"
此处不允许设置value
属性。
在 TypeScript 中,如果我想实现相同的行为,我必须这样做(如get and set in TypeScript所建议的那样):
class Field {
_value: number;
constructor(arg) {
this._value = arg;
}
get value() {
return this._value;
}
set value() {
console.log("cannot set");
}
}
var obj = new Field(10);
console.log(obj.value); // 10
obj.value = 20; // "cannot set"
obj._value = 20; // ABLE TO CHANGE THE VALUE !
console.log(obj.value); // 20
但是你在这里看到的问题是,所谓的私有属性_value
可以被用户直接访问/更改,而无需通过 get/set 方法value
。如何限制用户_value
直接访问此属性 ( )?