<分区>
我想在我的类(class)中拥有私有(private)属性(property)。我有一门课叫 Person
和该类的一个实例:person
用 let person = new Person('name1')
声明.
我想把名字保存在person
中的属性。我可以简单地做:
class Person {
constructor(name) {
this.name = name;
}
}
但是我也想在改变这个值的时候执行一些 Action ,所以我使用了一个Setter:
class Person {
set name() {
// some actions
}
constructor(name) { }
}
但是我该如何保存这个名字呢?我必须有另一个属性,例如 _name
将用于保存实际值
class Person {
set name(newName) {
// some actions
return this._name;
}
set name(newName) {
this._name = name;
// some actions
}
constructor(name) {
this._name = name;
}
}
问题是 _name
可以通过 person._name
在外部访问.
有没有办法让它无法从外部访问?
我的灵感来自 this answer (不使用 getter 和 setter)并试图包含 _name
在定义 getter 和 setter 时。以下代码不起作用:
class Person {
constructor(name) {
var _name = name;
Object.defineProperties(this, {
"name": {
"get": () => { return _name; },
"set": () => { _name = name; }
}
});
}
}