为什么公共方法在类范围

时间:2016-01-22 08:53:09

标签: javascript prototype

在一些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关键字的方法添加到已定义的类中时。

1 个答案:

答案 0 :(得分:1)

必须在Employee.prototype.publicGetFullName构造函数之外定义公共方法Employee

当你在里面使用它并引用私有函数时,它将在每个实例化上重新定义,因此它将返回最后创建的实例的“私有”数据而不是此实例。