Object.defineProperty和返回值

时间:2014-11-27 21:11:02

标签: javascript object setter getter defineproperty

我正在玩一个使用Object.defineProperty方法定义一些getter和setter的javascript对象。

function User() {       
    var _username;  
    var _id;

    Object.defineProperty(User, 'id', {
        get: function() {
            return _username;
        }       
    });         

    Object.defineProperty(User, 'username', {
        get: function() {
            return _username;
        },
        set: function(username) {
            this._username = username;          
        }
    }); 
}

对于其中一个属性(id),我只想要一个getter。最初我有一个错字,它返回_username的值,但我很快意识到上述情况不起作用。仅仅是为了好奇,我试图理解为什么它没有像预期的那样工作。如果我做了以下事情:

var u = new User();
u.username = 'bob';
alert(u.username);
alert(u.id);

最后一个语句会提醒undefined而不是bob。这是为什么?有没有办法让它返回另一个属性?

1 个答案:

答案 0 :(得分:1)

您必须在this而不是构造函数

上定义属性
function User(params) {       
   var _username;

   Object.defineProperty(this, 'id', {
        get: function() {
            return _username;
        }       
   });         

   Object.defineProperty(this, 'username', {
        get: function() {
            return _username;
        },
        set: function(username) {
            _username = username;          
        }
   }); 
   if (params && params.username) {
       this.username = params.username;
   }
}
User.prototype.stringify = function () {
    return JSON.stringify({ username: this.username});
}