在对象的属性中使用'set'的好处?

时间:2018-06-05 15:47:08

标签: javascript function methods javascript-objects setter

我正在开发Codecademy课程,并编写了以下有效的代码:

let person = {
  _name: 'Lu Xun',
  _age: 137,

set age (newAge) {
    if (typeof newAge === 'number'){
      this._age= newAge;
    } else {
      console.log('Invalid input');
    }
  } 
}

person.age= 22;

console.log(person['_age']);

我正在研究这个集合是如何工作的,并且认为它基本上与使用不同语法在person对象中定义方法相同。

所以我试了一下,调用age方法,使用你调用方法的常规方法从对象外面传递22。它的工作方式相同。见下文。

let person = {
  _name: 'Lu Xun',
  _age: 137,

age: function (newAge) {
    if (typeof newAge === 'number'){
      this._age= newAge;
    } else {
      console.log('Invalid input');
    }
  } 
}

person.age(22);

console.log(person['_age']);

使用'set'语法有什么好处?即为什么在正常的函数/方法定义以相同的方式工作时使用它?

2 个答案:

答案 0 :(得分:1)

想象一下,你编写了一个非常庞大的代码,并且很多代码都访问了这样的变量:

// The object
const person = { age: 12 }
// You access it very often
console.log(person.age);

现在你肯定想根据生日来计算年龄。使用某种方法,您必须在每次使用时将person.age替换为person.getAge()。这可能需要时间。使用getter / setter,你只需要替换一行,一切都能继续工作。

如果您不认为这是一个问题,您可能需要查看this java thread。 Java没有getter / setter。

答案 1 :(得分:0)

get / set语法用于属性,而使用方法就是一个方法。大多数情况下,一个简单的公共变量就足够了,但有时候,比如你的例子中你想要验证输入以确保它满足你对值的任何期望。

还要考虑如何调用代码以及代码的样子。如果您要使用函数来更改值,使用函数来获取值,您的代码将如下所示:

var myObject = new CoolObject('some parameter');
myObject.setComment('this is a super cool comment');
console.log(myObject.getComment());

如果您在属性上实现了get / set函数,它将如下所示

var myObject = new CoolObject('some parameter');
myObject.comment = 'This is a super cool comment';
console.log(myObject.comment);

在一天结束时,它确实无关紧要,因为两个代码片段都会完全相同,但是一个人阅读起来更容易,并且不会让你的同事大吼大叫。请记住,如果您只是公开一个公共变量,第二个示例就不会改变。