2011-09-09 3 views
1

これは簡単な質問ですが、Googleやこのサイトで何も見つかりませんでした。 私が持っているそうだとすれば、私は、例えば1つによってそれをいずれかを実行することなく、両方のfoo()とバー()をロードする方法を名前空間内のすべてのメソッドを初期化する方法namespaces javascriptすべてのメソッドを初期化する

var myNamespace = { 

    foo: function() { 
    }, 

    bar: function() { 
    } 
}; 

<script type="text/javascript"> 
    $(document).ready(function(){ 
     myNamespace.foo(); 
     myNamespace.bar(); 
     . 
     . 
     . 
    }); 
</script> 

答えて

1

私はこれをテストしていませんが、このようなものが役立つはずです。 JavaScript内のすべての関数は、呼び出す方法がcall()です。その後:

 

$(document).ready(function() { 
    $.each(myNamespace, function(index, obj) { 
    if (typeof(obj) == 'function') 
    { 
     obj.call(myNamespace); 
    } 
    }); 
}); 
 

あなたはthisスコープの参照を交換する必要がある場合、あなたはjQuery.proxyでこれまでパッチを当てることができました。

+1

1. 'function'' 'Function''は'でなければなりません'。 2. 'call'メソッドにコンテキスト' namespace'を与える必要があります。 – bjornd

+0

@bjorndありがとう!一定。 –

+0

が治療を受けました。両方のおかげで! – odle

2
for (var k in namespace) { 
    if (typeof namespace[k] === 'function') { 
     namespace[k]();  
    } 
} 
+0

名前空間内の何かが関数でない場合、これは失敗すると思います。 –

+0

@Joel Alejandro fixed – bjornd

2
var func; 

for (func in namespace) { 
    if (namespace.hasOwnProperty(func) { 
     if (typeof namespace == 'Function') { 
      namespace[func](); 
     } 
    } 
} 
+1

変数名に予約語 'function'を使うのは悪い考えです。 – bjornd

+0

あなたはそうです。私は忘れてしまった。私はすぐに修正します。 – user278064

関連する問題