2014-03-05 34 views
0

我有一个类(构造函数)User如何在构造函数的新创建的onjects上定义getter函数?

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函数那样不起作用。还有其他可能吗?

+1

您设置它的方式,_id属性是公共的并且可以访问。添加一个getter函数是多余的。 – MjrKusanagi

+0

有关原型的更多信息,请访问http://stackoverflow.com/a/16063711/1641941链接到可模拟受保护成员的模式最后 – HMR

回答

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'); } 
    }); 
} 
0

您设置的方式_id属性是公开的并且可以访问。添加一个getter函数是多余的。

要正确地隐藏内部变量为对象,您需要:

function User(id) { 
    var _id = id; 

    this.getID = function(){ 
     return _id; 
    } 
} 

如果不正确地隐藏变量,何苦写一个getter;你现在的方式,你可以做console.info((new User(12))._id)。如果您将一个变量附加到this指针,它将使其成为该类的公共属性。