在一些javascript视频教程(Private members in JavaScript)中,有一个关于私有,特权和公共成员的解释,并显示了这段代码示例:
function Emloyee(firstName, lastName){
// Private field
var privateFullName;
// Public fields
this.firstName = firstName;
this.lastName= lastName;
// Private function
var privateGetFullName = function(){
privateFullName = firstName + " " + lastName;
return privateFullName;
}
// Privileged function
this.privilegedGetFullName = function(){
return privateGetFullName();
}
// Public function
Employee.prototype.publicGetFullName = function(){
return this.privilegedGetFullName ();
}
}
据说公共方法可以调用特权方法,但不能调用私有方法。如果在此示例中定义为内部函数的公共函数将在此类示例之外定义,我同意这一点,但在此示例的情况下,它在类作用域中定义,其中私有成员存在,那么为什么公共函数不会私有成员值和闭包一样吗?
另外我要提一下,在观看本教程之前,在本例中我称之为特权和公共方法,它们都是相同的,只是公开的(我不知道第一个应该被称为特权)我们称之为将类原型作为公共函数扩展的那个,我只是知道我们应该使用原型,当我们必须将一个带有this关键字的方法添加到已定义的类中时。
答案 0 :(得分:1)
必须在Employee.prototype.publicGetFullName
构造函数之外定义公共方法Employee
。
当你在里面使用它并引用私有函数时,它将在每个实例化上重新定义,因此它将返回最后创建的实例的“私有”数据而不是此实例。