我有一个类(构造函数)User
function User(id) {
this._id = id;
}
我从中创建像user
var user = new User(9);
我想为这个user
对象编写getter函数,但实际上并不特别为它,而是为我的构造函数User
创建的所有对象。
我虽然这应该有用,但它不是
Object.defineProperty(User, 'id', {
get: function() {
console.info('Using getter..');
return this._id;
},
// set:function(val) { alert('set value'); }
});
var user = new User(9);
console.info(user.id); // gives undefined
我认为这是因为User
是一个构造函数,实际上并不是一个对象,定义这样的getter函数是行不通的。还有其他方式吗?
答案 0 :(得分:1)
想出来。只需要在构造函数本身内部移动getter定义,从中我可以正确使用this
。
function User(id) {
this._id = id;
Object.defineProperty(this, 'id', {
get: function() {
console.info('Using getter..');
return this._id;
},
// set:function(val) { alert('set value'); }
});
}
答案 1 :(得分:0)
您设置的方式,_id属性是公共的,可访问。添加一个getter函数是多余的。
要正确隐藏内部变量到该对象,您需要:
function User(id) {
var _id = id;
this.getID = function(){
return _id;
}
}
如果你没有正确隐藏变量,为什么还要写一个getter;你现在拥有它的方式,你可以console.info((new User(12))._id)
。如果将变量附加到this
指针,则会使其成为该类的公共属性。