以下两个代码是等效的并提供相同的结果:
1
const menu = {
_courses: {
appetizers: [],
mains: [],
desserts: [],
},
get appetizers() {
return this._courses.appetizers;
},
set appetizers(appetizer) {
this._courses.appetizers= appetizer;
}
}
menu.appetizers.push(['food']);
console.log(menu.appetizers);
2
const menu = {
_courses: {
appetizers: [],
mains: [],
desserts: [],
},
}
menu._courses.appetizers.push(['food']);
console.log(menu._courses.appetizers);
第一种方法使用 getter/setter,而第二种方法直接访问属性,所以我的问题是..对我来说,第二种方法更容易理解,那么为什么 getter/setter 是“更好”的方式?
有很多线程建议为什么应该使用 getter/setter,但我很想知道对于我给出的示例,哪种方法更好?
最佳答案
getter 和 setter 是数据抽象,并提供验证检查的机会。
示例:
根据我的评论,
I want to create a property Age which should only accept numbers
下面是一个示例,它为类属性添加了有关其可能值的智能。这是 getter 和 setter 很有帮助的简单用例之一
function SimplePerson(name, age) {
this.name = name;
this.age = age;
}
function SmartPerson(name, age) {
// Private validators
function isNameValid(value) {
return /^[a-z']+$/i.test(value);
}
function isAgeValid(value) {
return /\d+/.test(value)
}
// Private property
var name = '';
var age;
Object.defineProperty(this, 'name', {
get: function() {
return name;
},
set: function(value) {
if (isNameValid(value)) {
name = value;
} else {
console.log('Value passed for Name is incorrect')
}
}
})
Object.defineProperty(this, 'age', {
get: function() {
return name;
},
set: function(value) {
if (isAgeValid(value)) {
name = value;
} else {
console.log('Value passed for Age is incorrect')
}
}
})
this.name = name;
this.age = age;
}
var simplePerson = new SimplePerson(123, 'Foo Bar');
var smartPerson = new SmartPerson(123, 'Foo Bar');
console.log(simplePerson, smartPerson)
关于javascript - 为什么在JS中使用getter/setter而不是直接访问属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58010193/