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函数是多余的。这里有更多关于原型的信息。最后是一个指向可以模拟受保护成员的模式的链接