我正在尝试在班级内拥有私有财产。我有一个名为Person
的类和该类的一个实例:person
用let person = new Person('name1')
声明。
我想将名称保存在person
的属性中。我可以简单地做到:
class Person {
constructor(name) {
this.name = name;
}
}
但是我也想在更改此值时执行一些操作,所以我使用了一个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)中汲取了灵感,并尝试在定义getter和setter时将_name
括起来。以下代码不起作用:
class Person {
constructor(name) {
var _name = name;
Object.defineProperties(this, {
"name": {
"get": () => { return _name; },
"set": () => { _name = name; }
}
});
}
}
答案 0 :(得分:3)
“ set”:()=> {_name =名称; }
您在这里只是一个小错误。应该是:
"set": (newName) => { _name = newName; }