我正在使用一个 javascript 对象,它使用 Object.defineProperty 方法定义了一些 getter 和 setter。
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
。这是为什么?有没有办法让它返回另一个属性?
最佳答案
您必须在 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});
}
关于javascript - Object.defineProperty 和返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27178681/