Javascript JS:类getter/setter与直接更改属性
能手和二传手的好处是什么?我还不能通过Javascript JS:类getter/setter与直接更改属性,javascript,Javascript,能手和二传手的好处是什么?我还不能通过newPerson.\u name和getmike?要设置它,我不能只做newPerson.\u name=“Phil”来设置它吗?封装有一些好处,包括验证数据(如果设置了错误的值就会抛出错误)和适当地格式化数据(返回“User has no name”而不是undefined)。这还意味着,如果您决定更改对象数据的处理方式,则可以将getter/setter指向新数据,而无需不断更新过时的属性。如果您更喜欢属性的语法,JavaScript具有实现这些get
newPerson.\u name
和getmike
?要设置它,我不能只做newPerson.\u name=“Phil”
来设置它吗?封装有一些好处,包括验证数据(如果设置了错误的值就会抛出错误)和适当地格式化数据(返回“User has no name”而不是undefined
)。这还意味着,如果您决定更改对象数据的处理方式,则可以将getter/setter指向新数据,而无需不断更新过时的属性。如果您更喜欢属性的语法,JavaScript具有实现这些getter/setter特性的对象
这种封装可能很有用。查看getter应该会给您一个提示:
class Person {
constructor(name) {
this._name = name;
}
get name() {
return this._name.toUpperCase();
}
set name(newName) {
this._name = newName;
}
}
let newPerson = new Person("mike")
它可以让您执行可能复杂的逻辑,伪装成简单的属性查找。在另一个例子中,考虑如果你有“代码>第一个名字< /COD>和<代码> LSTNEXT/<代码>属性,那么,你可以使<代码>名称>代码>一个用于实际底层属性的吸收器/设置器:
班级人员{
建造师(姓名){
//调用下面的setter
this.name=名称;
}
获取名称(){
返回此项。_firstName+“”+此。_lastName;
}
集合名称(新名称){
const[first,last]=newName.split(“”);
这个。_firstName=first;
这个。_lastName=last;
}
}
让新人=新人(“约翰·史密斯”)
console.log(newPerson.name)代码>
get name() {
return this._name.toUpperCase();
}