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 定义。然而,它不是数据 属性,而是访问器 属性,因此它没有自己的价值。
您好,在这个代码示例中,我无法完全理解何时从构造函数调用 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 定义。然而,它不是数据 属性,而是访问器 属性,因此它没有自己的价值。