2011-09-22 10 views

答えて

5

自己呼び出し機能を使用すると、直接プロパティを使用できるように、このオブジェクトはグローバルスコープに追加されません、プロパティhiでオブジェクトを返します。変数に関数の結果を入れて:あなたは関数を呼び出す関数からの戻り値を呼び出す必要がありますので、関数を呼び出してプロパティを使用し

var o = 
(function(){ 

    var a = function(){ 
    alert("hey now!! "); 
    }; 

    return {"hi":function(){return a;}}; 

})(); 

は、変数aに含まれる機能を返します。

o.hi()(); 

デモ:あなたは現在のスコープ内の変数に無名関数の戻り値を代入する必要がhttp://jsfiddle.net/Guffa/9twaH/

0
var obj = (function(){ 

var a= function(){ 
    alert("hey now!! "); 
}; 

return {"hi":function(){return a;}}; 

})(); 

obj.hi() 
+0

"return a;"を置き換えます。ちょうど "a"とそれは動作します。 –

0

それは警告が含まれています
var f = (function() { 
    var a = function() { 
     alert("hey now!! "); 
    }; 
    return { 
     "hi": function() { return a; } 
    }; 
})(); 
f.hi()(); 
3

二つの基本的な方法があります。

var MyNameSpace = (function(){ 

    function a(){ 
     alert("hey now!! "); 
    }; 

    return {a: a}; 

})(); 

MyNameSpace.a(); 

または

(function(){ 

    function a(){ 
     alert("hey now!! "); 
    }; 

    MyNameSpace = {a: a}; 

})(); 

MyNameSpace.a(); 

が、それはそれはところで「暴露のモジュールパターン」と呼ばれているクリーナー

だので、私は2番目の道を好みますあなたはそれをよりよく理解するために読むことができます:)

https://addyosmani.com/resources/essentialjsdesignpatterns/book/#revealingmodulepatternjavascript

+1

第2の方法はグローバル変数を作成しますが、第1の方法は周囲のスコープが何であっても変数を作成することに注意してください。 – nnnnnn

+0

それは本当です。この例は少し限られていました。通常はトップレベルの名前空間としてグローバル変数を作成し、それを基にDOM汚染を最小限に抑えます。 –

+0

jQueryは2番目のメソッドを使って '$'メソッドをグローバルスコープに公開しますか?ソースコードを見ると、最初のような? – John

0

それは?

(function(){ 
    var a = function() { 
    alert("hey now!! "); 
    }; 
    return {"hi":function(){return a;}}; 
})().hi()(); 
0

私が代わりにそのコードで、機能を露出させるために、構文が

var obj2 = (function(){ 

    var a= function(){ 
     alert("hey now!! "); 
    }; 

return {"hi":a}; 

})(); 

alert(obj2.hi()); 
0

それとも、そのような生命維持にあなたの「ハイテク」機能をラップすることができ...

あるべきと仮定
var myFunction = (function(){ 
    var a = function() { 
    alert("hey now!! "); 
    }; 
    return { 
     "hi": (function(){ 
      return a; 
     }()) 
    }; 

})(); 

myFunction.hi(); 
関連する問題