由于我没有将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
答案 0 :(得分:3)
因为在构造函数中设置了this.name
,但是name
的设置器实际上设置了_name
。因此,不会,它不会自动创建-JavaScript对象在不存在该属性时创建该属性是正常行为。即使已经存在,逻辑也一样-考虑一下。如果您有一个if
语句来检查它是否存在,它将是什么样?这个:
if (this._name) this._name = value;
else this._name = value;
实际上,发生的任何事情都没有区别,因为访问未定义的属性会返回undefined
而不是抛出错误-如果有帮助,您可以认为它存在,而仅仅是undefined
。 / p>