Javascript 如何在构造函数上定义getter函数';什么是新创建的对象?
我有一个类(构造函数)Javascript 如何在构造函数上定义getter函数';什么是新创建的对象?,javascript,Javascript,我有一个类(构造函数)User function User(id) { this._id = id; } var user = new User(9); 我从中创建对象,如user function User(id) { this._id = id; } var user = new User(9); 我想为这个user对象编写getter函数,但实际上并不是特别针对它,而是针对由构造函数user创建的所有对象 我想这应该行得通,但是不行 Object.definePro
User
function User(id) {
this._id = id;
}
var user = new User(9);
我从中创建对象,如user
function User(id) {
this._id = id;
}
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函数是行不通的。还有别的办法吗?找到了答案。只需将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'); }
});
}
按照您的设置方式,_id属性是公共的,可以访问。添加getter函数是多余的 要正确隐藏该对象的内部变量,需要:
function User(id) {
var _id = id;
this.getID = function(){
return _id;
}
}
如果没有正确地隐藏变量,为什么还要麻烦编写getter;按照现在的方式,您只需执行
console.info((新用户(12))。\u id)
。如果将变量附加到此
指针,则它将成为该类的公共属性。按照设置方式,\u id属性是公共的且可访问的。添加一个getter函数是多余的。这里有更多关于原型的信息。最后是一个指向可以模拟受保护成员的模式的链接