为什么自动创建以“ _”开头的属性?

时间:2019-08-09 08:36:35

标签: javascript object

由于我没有将this._name声明为属性,这不会引发错误吗?为什么会自动创建它?

p.s。***如果this.name和this._name是一个不同的属性,它是否应该打印Tom / Tom / Tom,因为this.name在声明后没有更改?

class Person{
  constructor(name){
    this.name=name;
  }
  get name(){
    return this._name;
  }
  set name(value){
    this._name=value;
  }
  sayName(){
    console.log(this.name);
  }
}
var person=new Person("Tom");//TOM
console.log(person.name);
person.name="Huck";
console.log(person.name);//Huck
person.sayName();//Huck

1 个答案:

答案 0 :(得分:3)

因为在构造函数中设置了this.name,但是name的设置器实际上设置了_name。因此,不会,它不会自动创建-JavaScript对象在不存在该属性时创建该属性是正常行为。即使已经存在,逻辑也一样-考虑一下。如果您有一个if语句来检查它是否存在,它将是什么样?这个:

if (this._name) this._name = value;
else this._name = value;

实际上,发生的任何事情都没有区别,因为访问未定义的属性会返回undefined而不是抛出错误-如果有帮助,您可以认为它存在,而仅仅是undefined。 / p>