定义了一个对象。
var bob = {age: 10};
将setter定义为:
bob.setAge = function (newAge){
bob.age = newAge;
};
因此我们可以将属性更改为:
bob.setAge(20)
而不仅仅是:
bob.age = 20;
或
bob["age"] = 20;
最好的做法是什么原因?
答案 0 :(得分:3)
因为这允许隐藏和保存对象的状态以防止不必要的副作用
bob.setAge = function (newAge){
bob.age = newAge || 0; // age must never be undefined or null;
};
你必须将一切都包装在一个模块/闭包/函数中,以实际隐藏带有对象状态的字段。
var user = (function () {
var name = '';
function getName() {
return name;
}
function setName(value) {
if (!value) {
console.warn('setName: empty value passed');
}
name = value || '';
}
return {
getName: getName,
setName: setName
};
}());
// undefined, the variable could not be resolved
console.info(user['name']);
user.setName('Sergio Prada');
console.info(user.getName());
// warning
user.setName(null);
// empty string, undefined or null will never be returned
console.info(user.getName());
答案 1 :(得分:1)
对于getter,它允许应用验证检查以确保只设置正确的值。
除此之外,您还可以封装变量的内部存储方法。例如,如果您将数据存储在数据库中,则可以对数据进行加密,但在getter中进行解密以便自动准备