2011-06-21 75 views
3

从来就定义这样一个类:从公共方法调用私有方法?

function Class1(){ 
    this.Func1 = function(){ 
     /* Methods and vars */ 
    }; 

    function Func2(){ 
     /* Methods and vars */ 
    }; 

}; 

我想找出一种方法来调用公共方法(或申请一个公共变量的值)从一个私人(FUNC2())。任何消化?

Pd:对不起,如果我使用的术语强烈面向对象,因为我是一个C++程序员,并且我在JavaScript编程中有点儿陌生。

+0

'Func2'实际上是这里是“私人方法”,而“Func1”是“公开”。 –

+0

对不起,我在写这个问题的速度很快 –

+0

你应该写'this.Func1 = new function()'而不是'this.Func1()= new function()' – recamshak

回答

8

Func1,可以直接调用Func2

this.Func1 = function() { 
    Func2(); 
}; 

但是,你不能这样做,从Func2调用Func1因为Func2将(可能)有不同的范围和this不同的定义时,它是所谓的; this.Func1将是未定义的。如下所示,您可以使用另一个变量保存范围,该变量在内部函数中使用时将保留其值。您也可以保存在本地范围Func1参考如下:

var Func1 = this.Func1 = function() { 
    // fun stuff 
}; 

function Func2() { 
    Func1(); 
} 

这工作,因为它不依赖于不断变化的参考this

+2

这只有在'.apply(this)'或'.call(this)'调用'Func2'时才有效。 –

+0

不只*,但这是一种方法。这取决于如何调用Func2,并且由于OP没有提供任何方式调用它(也没有接受的答案),所以我们不知道如何从它调用* Func1 *。 – RobG

+0

本 - 这个答案是不够的。 * Func2 *如何调用* Func1 *取决于* Func2 *的调用方式。你没有显示,OP也没有,所以你不知道Func2 *里面的'this'会引用。 – RobG

-1

在同一范围内被宣布,公众的方法是知道私单的,因此,你可以只是简单的称之为:

function Object1(){ 
    this.publicMethod = function(){   
     alert("I'm a public method ;)"); 
    }; 
    var that = this; 
    function privateMethod(){ 
     return that.publicMethod.apply(that,arguments); 
    }; 
}; 
+0

“privateMethod”中“this”的值是未知的,因为你没有显示如何调用它。 – RobG

6

使用封闭:

function Class1(){ 
     this.Func1 = function(){ 
      /* Methods and vars */ 
     }; 

     var me = this; 

     function Func2(){ 
      me.Func1(); 
     }; 

    };