class 构造函数调用 setter 时到底发生了什么

What exacly happens when a class constructor calls a setter

您好,在这个代码示例中,我无法完全理解何时从构造函数调用 setter fullname 方法,为什么构造函数不会同时创建 属性 "fullname" 但它只是调用 setter 并移动到下一行。

谁能详细解释一下发生了什么,我将不胜感激。

class Person {
  constructor(fullname, birthYear) {
    this.fullname = fullname;
    this.birthYear = birthYear;
  }          
  set fullname(name) {
    if (name.includes(' ')) this._fullname = name;
    else alert(`${name} is not a full name`);
  }
 
  get fullname() {
    return this._fullname;
  }
}
 
const personObj = new Person('FirstName Lastname', 1999);
console.log(personObj);

new关键字创建一个原型为Person的对象,然后调用构造函数。所以当调用构造函数时,它已经有了那个对象,并且那个对象有一对 setters 和 this.fullname 的 getter。如果您尝试分配给 this.fullname,setter 和 getter 的标准行为就会发生,并且 setter 将被调用。由于在构造函数中,行为不会被修改。

构造函数不会创建名为 fullname 的新 属性,因为 属性 已经存在,由 getter 和 setter 定义。然而,它不是数据 属性,而是访问器 属性,因此它没有自己的价值。