关于this.name 和 this._name
getter/setter 可以用作“真实”属性值的包装器,以便对它们进行更多的控制。
例如,如果我们想禁止太短的 user
的 name,我们可以创建一个 setter name
,并将值存储在一个单独的属性 _name
中:
let user = {
get name() {
return this._name;
},
set name(value) {
if (value.length < 4) {
alert("Name is too short, need at least 4 characters");
return;
}
this._name = value;
}
};
user.name = "Pete";
alert(user.name); // Pete
user.name = ""; // Name 太短了……
所以,name 被存储在 _name
属性中,并通 过 getter 和 setter 进行访问。
从技术上讲,外部代码可以使用 user._name
直接访问 name。但是,这儿有一个众所周知的约定,即以下划线 "_"
开头的属性是内部属性,不应该从对象外部进行访问。