为什么使用setter之类的方法,而不是直接在Javascript中更改属性?

时间:2016-01-21 19:47:32

标签: javascript methods setter

定义了一个对象。

var bob = {age: 10};

将setter定义为:

bob.setAge = function (newAge){
  bob.age = newAge;
};

因此我们可以将属性更改为:

bob.setAge(20)

而不仅仅是:

bob.age = 20;

bob["age"] = 20;

最好的做法是什么原因?

2 个答案:

答案 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中进行解密以便自动准备