在一些 javascript 视频教程 ( Private members in JavaScript ) 中,对什么是私有(private)成员、特权成员和公共(public)成员进行了解释,并显示了这段代码示例:
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 ();
}
}
据说公共(public)方法可以调用特权方法,但不能调用私有(private)方法。如果本示例中定义为内部函数的公共(public)函数将在此类示例之外定义,我会同意这一点,但在本示例中,它是在存在私有(private)成员的类范围内定义的,那么为什么公共(public)函数不采用私有(private)成员值和闭包一样吗?
另外,在观看本教程之前,我要提到的是,在这个示例中,对我来说,所谓的特权方法和公共(public)方法是相同的,而且都是公共(public)的(我不知道第一个应该称为特权方法),我们称之为将类原型(prototype)扩展为公共(public)函数,我只是知道当我们必须向已定义的类添加带有 this 关键字的方法时应该使用原型(prototype)。
最佳答案
公共(public)方法Employee.prototype.publicGetFullName
必须在Employee
构造函数之外定义。
当您在内部使用它并引用私有(private)函数时,它将在每次实例化时重新定义,因此它将返回最后创建的实例的“私有(private)”数据,而不是此实例。
关于javascript - 为什么在类范围内定义时公共(public)方法无法访问私有(private)成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34942522/