2011-06-21 116 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(); 
     }; 

    };