Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS:类getter/setter与直接更改属性_Javascript - Fatal编程技术网

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
和get
mike
?要设置它,我不能只做
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();
  }