我正在玩一个使用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
。这是为什么?有没有办法让它返回另一个属性?
答案 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});
}