我阅读了一些文章和问题,但我仍然不明白如何实现这一目标。以下片段将帮助我解释我要做的事情:
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
上定义。
另一方面,用this._email = email
宣布email
的工作正常,但这并不能保留隐私,因为我可以直接访问Asan Object属性而无需访问方法。
我想知道的:
- 使用构造函数函数时声明私有变量的最佳方法是什么?
- 如果我使用
var
声明变量,那么它将位于对象中?
尝试以下:
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... }
用 var
声明的变量仅位于函数范围中。
获得私人财产,您能做的最好的就是命名它们,以便它们显然是私人的,希望人们不会出现并将其变异。下划线是一种体面的方法。
您也可以通过功能和封闭来拉动花哨的技巧,但归根结底,它们不会是属性。