JavaScript Setter 和 Getter:
通常 setter 和 getter 方法在 JavaScript 对象中遵循以下语法。创建一个具有多个属性的对象。setter 方法有一个参数,而 getter 方法没有参数。两者都是函数。
对于已经在对象中创建的给定属性,set 方法通常是一个 if/else 语句,该语句在以后通过代码(也称为“set”)直接访问和分配该属性的任何时候验证输入。这通常通过使用 if (typeof [arg] === '某些类型的值,例如:数字、字符串或布尔值') 语句来完成,然后代码块通常分配 this.(specific)property-name到论点。(偶尔会有一条消息记录到控制台。)但它不需要返回任何东西;它只是设置 this.specific-property 来评估参数。但是,else 语句几乎总是在控制台上显示(错误)消息日志,提示用户为满足 if 条件的属性键值输入不同的值。
getter 方法基本上是相反的。它设置了一个不带任何参数的函数来“获取”,即当您调用刚刚设置的特定属性时返回一个(另一个)值/属性。它“得到”你的东西不同于你通常响应调用该对象属性所得到的东西。
对于您不希望能够直接修改的属性键值,可以很容易地看到 setter 和 getter 的值,除非满足某些条件。对于这种类型的属性,使用下划线继续属性名称,并使用 getter 使您能够在没有下划线的情况下调用属性。然后使用 setter 定义可以访问和分配属性键值的条件,也就是“set”。例如,我将为这个对象的属性包括两个基本的 setter 和 getter。注意:我使用一个常量变量,因为对象仍然是可变的(在创建之后)。
const person = {
_name: 'Sean';
_age: 27;
set age(ageIn) {
if (typeof ageIn === 'number') {
this._age = ageIn;
}
else {
console.log(`${ageIn} is invalid for the age's key-value. Change ${ageIn} to/into a Number.`);
return 'Invalid Input.';
}
},
get age() {
return this._age;
},
set name(nameIn) {
if (typeof nameIn === 'string') {
this._name = nameIn;
} else {
console.log(`Change ${nameIn} to/into a(ny) String for the name's
key-value.`);
return 'Invalid Input.';
}
},
get name() {
return this._name;
}
};
有趣的是,当您尝试为 _age 属性设置/分配新的键值时,因为它必须满足 if 条件才能成功分配,这意味着并非所有分配都是有效的,等等。
person.age = 'twenty-eight'; /* output: twenty-eight is invalid for the
age's key-value. Change twenty-eight to/into a Number. */
console.log(person.age); // output: 27 (twenty-eight was never assigned)
person.age = 28; // output: none
console.log(person.age); // output: 28
请注意,由于 getter 方法,我如何能够通过 person.age 属性访问 person._age 属性。此外,类似于 age 的输入被限制为数字,name 属性的输入现在被限制/设置为字符串。
希望这有助于澄清事情!此外,一些更多的链接:
https://johnresig.com/blog/javascript-getters-and-setters/
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get
https://www.infragistics.com/community/blogs/infragistics/archive/2017/09/19/easy-javascript-part-8-what-are-getters-and-setters.aspx