我读了几篇文章和问题,但我仍然不明白如何实现这一目标。以下代码片段将帮助我解释我想要做的事情:
function Employee(id, name, email){
var _id = id;
var _name = name;
this._email = email;
}
Employee.prototype.getId = function(){
return _id;
}
Employee.prototype.getName = function(){
return this._name;
}
Employee.prototype.getEmail = function(){
return this._email;
}
我接着创建了几个实例:
var emp1 = new Employee(1,'Brendan Eich','brendaneich@gmail.com');
当我将var
用于id
和&等变量时name
他们的行为与私人会员一样,但我无法通过getId()
上定义的getName()
和Employee.prototype
等方式访问这些广告。
另一方面,用email
声明this._email = email
一切正常,但这并不能保护隐私,因为我可以直接访问它作为对象属性,而无需访问方法。
我想知道的事情:
var
来声明变量,那么它将在何处驻留在对象中?答案 0 :(得分:2)
试试这个:
function Employee(id, name, email){
var _id = id; //private
var _name = name; //private
this._email = email; //public
var fooPrivate = function(){
return ;
}
this.getId = function(){ //Public function
fooPrivate(); //I can only be called inside other member functions
return _id;
}
this.getName = function(){ //Public function
//Note that you don't use this._name for private variables
return _name;
}
this.getEmail = function(){ //Public function
return this._email;
}
}
使用构造函数时声明私有变量的最佳方法是什么?
如果我使用var来声明变量,那么它将在何处驻留在对象中?
function Employee{ //private only accessible here... }
答案 1 :(得分:2)
使用var
声明的变量只驻留在函数的范围内。
要获得私有财产,您可以做的最好的事情是将它们命名为明显私密,并希望人们不会来并改变它们。下划线是一种不错的方式。
您还可以使用函数和闭包来获取花哨的技巧,但在一天结束时,它们将不是属性。