我正在开发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'语法有什么好处?即为什么在正常的函数/方法定义以相同的方式工作时使用它?
答案 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);
在一天结束时,它确实无关紧要,因为两个代码片段都会完全相同,但是一个人阅读起来更容易,并且不会让你的同事大吼大叫。请记住,如果您只是公开一个公共变量,第二个示例就不会改变。