如何在构造函数的新创建的对象上定义getter函数?

时间:2014-03-05 05:01:45

标签: javascript

我有一个类(构造函数)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函数是行不通的。还有其他方式吗?

2 个答案:

答案 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指针,则会使其成为该类的公共属性。