2012-03-22 13 views
1

私はこのなぜこの内部関数は未定義に戻りますか?

function myFunction() { 
    var myVar = "I think I am encapsulated"; 

    function getMyVar() { 
     return myVar; 
    } 
} 

var myProperty = myFunction; 
myProperty.getMyVar(); // tells me myProperty.getMyVar is not a function. 

function myFunction() { 
    var myVar = "I think I am encapsulated"; 

    function getMyVar() { 
     return myVar; 
    } 
} 

var myProperty = myFunction(); 
myProperty.getMyVar(); // tells me myProperty is undefined 

とさえ

function MyFunction() { 
    var myVar = "I think I am encapsulated"; 

    function getMyVar() { 
     return myVar; 
    } 
} 

var myProperty = new MyFunction(); 
myProperty.getMyVar(); // tells me myProperty.getMyVar is not a function. 

と私は問題を取得する3つのすべてのケースで操作を行います。私はこの問題を3つのセクションすべてにラインコメントとして含めました。さて、誰かが私に閉鎖を使用するように言う前に、私は閉鎖を理解しようとしていない、私は内的機能がどうなるかを正確に理解しようとしています。

上記で説明できる場合は、感謝します。それは私には直観的ではないからです。

ありがとうございました

+5

内部関数は、囲み関数の*プロパティ*ではありません。 –

答えて

2

あなたはgetMyVar関数を公開していません。

あなたが欲しい:

function myFunction() { 
    var myVar = "I think I am encapsulated"; 

    this.getMyVar = function() { 
     return myVar; 
    } 
} 

しかし、myVarをもローカル機能の実行にスコープされています...とfuncitonが実行されていません。

最後の行は

(new myFunction()).getMyVar(); 

EDITする必要がありますおそらくあなたが探しているすべては擬似名前空間ですが?その場合、あなたは行うことができます。

var myObject = { 
    myProperty: "value", 
    myFunction: function() { } 
} 

それとも、あなたが、その場合にはあなたが行うことができ、プライベートメンバのようなmyVarに行為をしようとしている可能性が高い:あなたが何をしたか

var myObject = function() { 
    var myVar = "I think I am encapsulated"; 

    return { 
     getMyVar: function() { 
      return myVar; 
     } 
    } 
}(); //self-executing function 
+0

ありがとうございます。カプセル化についてさらに質問があります。別のスレッドでそれを取るかもしれない。 – dublintech

5

だけです

0: getMyVar インスタンスメンバを行い、実装を改善するために...クロージャを作成し、

myFunction内部関数を定義します

+0

ありがとうございます。私のペントリントを許してください。しかし、これはまた、myFunction内の関数を定義しているので、クロージャを作成します。 – dublintech

+0

私はそうではないとは言わなかった... – xandercoded

関連する問題