内部関数を呼び出す

私が持っている場合:

var myFunction = function() {
    var myInner = function() {
    }
}

myFunction.myInner()をどのように呼び出すのですか?

1

6 答え

次のようなこともできます:

var myFunction = function() {
   this.myInner = function() {
     //...
   }
}

var foo = new myFunction();
foo.myInner();

それとも静的クラスを模倣するのに使うもう一つのパターンです:

var myFunction = new function() {
   this.myInner = function() {
     //...
   }
};

myFunction.myInner();
3
追加された
そうです、私はまた、nheinrichが言及した地図アプローチも好きです。複数の機能をまとめてグループ化するだけでいいのは素晴らしいことです。個人的な変数やメソッドが必要な場合は、他のメソッドを呼び出す方法とそうでない方法があれば、私の方法はおそらく良いでしょう。
追加された 著者 Mike Christensen,
追加するには、これ。 myInner関数をmyFunctionオブジェクト上のpublicにアクセス可能な関数にします。varを使用すると、(クロージャを使用して)
追加された 著者 Matt,

あなたはそれをこのように呼び出すことができます:

var myFunction = function() {
    var myInner = function() {}

    return myInner;
}

myFunction()();

あなたの例では、内部関数を作成していますが、アクセス可能にするにはそれを返さなければなりません。

3
追加された
私の悪いおかげでおっとり。
追加された 著者 kemiller2002,
それは意味をなさない。 myFunction()()を意味しましたか?
追加された 著者 Esailija,

オブジェクトを少し違った方法で構築した場合は、以下を使用できます。

var myFunction = {
  innerFunction: function(txt){
    alert(txt);
  }    
}

myFunction.innerFunction("heyooo");

これはあなたが達成しようとしていることにもよるが理想的ではないかもしれない。

fiddle: http://jsfiddle.net/neilheinrich/Xjegt/

2
追加された
私はこれが素晴らしい例だと思う。
追加された 著者 Phillip Senn,

あなたはできません。あなたが尋ねたことをすることが可能な悪夢の世界を垣間見るために質問を言い直しましょう

var myFunction = function() {
    for(var i=0; i

内部関数にアクセスしたい場合は、それを返すか、関数の代わりに変数であれば、グローバル変数または何かを設定する必要があります。

1
追加された

関数はJavaScriptのスコープです。メソッドとして宣言しない限り、関数内から関数を呼び出すことはできません。あなたが望むものであろうとそうでないものであろうと、オブジェクトや奇妙なパターンを使うことを示唆している人もいます...

パブリック/プライベートのメソッドと変数を持つ "クラスのような"関数が必要な場合は、次のようにします。

//Declare your "class"
function Foo(specs) {

    //Can do whatever you want with specs
    //jQuery uses it to initialize plugin data ;)

    //These are examples of private variables
    var a = 1;
    var b = "b";

    //These are examples of public variables
    this.aa = 1;
    this.bb = "b";

    //This is a private method
    function Bar_Private(p0,p1) {...}

    //This is a public method
    this.Bar_Public = function(p0,p1) {...}

}

//Now to use it....
//Create an instance
var myInstance = new Foo();

//Using it
alert(myInstance.a);    //Reference Error
alert(myInstance.aa);   //Alerts 1

myInstance.Bar_Private(0,1);  //Reference Error
myInstance.Bar_Public(0,1);   //Calls Bar_Public with 0 and 1 as params

JavaScriptには実際のクラスはありませんが、このパターンを「クラスのような」ものとして記述するのが最も簡単です。

明らかに、公開/非公開のメソッド、オブジェクトなどを好きなだけ追加することができます。

また、このパターンでインスタンスを作成するときには「新しい」オペレータを忘れないでください。そうした場合、「this」はグローバルスペースにバインドされ、他のアプリケーションデータ(名前の衝突)を上書きできます。

これは、幸運を助けることを望む!

1
追加された
まあ、これは非常に完全な答えでした。ありがとうございました!
追加された 著者 Phillip Senn,
問題ありません、私が助けることができてうれしい
追加された 著者 jyore,

この場合、内部関数を何らかの形で返さない限り、外部関数の内部にあるコードを実行するときにのみ内部関数を呼び出すことができます。

var myFunction = function() {
    var myInner = function() {
    }
   //you can call it here
    myInner();
}
0
追加された
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript