【问题标题】:What's the difference about using methods and setters?使用方法和设置器有什么区别?
【发布时间】:2020-12-07 04:46:29
【问题描述】:

例如:

var person = {
  firstName: "John",
  lastName : "Doe",
  language : "",
  set lang(lang) {
  this.language = lang.toUpperCase();
}
};

person.lang = "en";
console.log(person.language)

var person1 = {
 firstName: "John",
 lastName : "Doe",
 language : function(a){return a.toUpperCase()}
};
console.log(person1.language('en'))

这看起来一模一样,方法模式写的少,为什么要使用setter?

【问题讨论】:

标签: javascript setter


【解决方案1】:

除了 getter 方法,我们还可以创建 setter 方法来重新分配对象中现有属性的值。一个setter方法的例子:

const person = {
  _age: 37,
  set age(newAge){
    if (typeof newAge === 'number'){
      this._age = newAge;
    } else {
      console.log('You must assign a number to age');
    }
  }
};

请注意,在上面的示例中:

  • 我们可以检查分配给 this._age 的值。
  • 当我们使用 setter 方法时,只有数字值才会重新分配 this._age
  • 根据使用的值有不同的输出 重新分配 this._age。

然后使用setter方法:

    person.age = 40;
    console.log(person._age); // Logs: 40
    person.age = '40';        // Logs: You must assign a number to age

像 age 这样的 Setter 方法不需要用一组括号来调用。从语法上看,我们似乎在重新分配属性的值。

与 getter 方法一样,使用 setter 方法也有类似的优点,包括检查输入、对属性执行操作以及显示对象应该如何使用的明确意图。尽管如此,即使使用 setter 方法,仍然可以直接重新分配属性。比如上面的例子,我们仍然可以直接设置._age:

person._age = 'forty-five'
console.log(person._age); // Prints forty-five

【讨论】:

    猜你喜欢
    • 2014-05-30
    • 2011-08-02
    • 2021-01-29
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    相关资源
    最近更新 更多