在javascript类中从“私有”方法访问“公共”方法

有没有办法从类中的“私有”中调用“public”javascript函数?

查看以下课程:

function Class()
{
    this.publicMethod = function()
    {
        alert("hello");
    }

    privateMethod = function()
    {
        publicMethod();
    }

    this.test = function()
    {
        privateMethod();
    }
}

这是我运行的代码

var class = new Class();
class.test();

Firebug发出这个错误:

publicMethod没有定义:[Break on this error] publicMethod();

有没有别的方式调用publicMethod()在privateMethod()中,而不访问全局类变量[即class.publicMethod()]?

接受的答案有可能不利的副作用,在每个实例中将分别创建publicMethod,test和privateMethod的副本.避免这样的成语是:

function Class()
{}

Class.prototype=(function()
{
    var privateMethod = function(self)
    {
        self.publicMethod();
    }


    return 
    {
        publicMethod: function()
        {
            alert("hello");
        },
        test: function()
        {
            privateMethod(this);
        }
    };
}());

换句话说,您需要将其作为参数传递给私有函数.作为回报,您将获得一个真正的原型,而不必用其自己的私有和公共功能版本来污染每个实例.

翻译自:https://stackoverflow.com/questions/2703582/accessing-public-methods-from-private-methods-in-javascript-class

转载注明原文:在javascript类中从“私有”方法访问“公共”方法