2012-05-04 23 views
0

大変恐ろしいタイトルですが、別の記述は考えられませんでした。JS Jqueryネームスペース関数の呼び出し

私は、次のコードを持って:あなたは、私がINITの内側からanotherFunctionを呼び出し、そこに私が試したが、うまくいきませんでした二つの方法がありますしようとしています見ることができるように

jQuery(document).ready(function($) 
{ 
    $.myNamespace = { 
      init: function() 
      { 

      $('.button').click(function() { 
        this.anotherFunction(); 
      }); 
      }, 
      anotherFunction: function() 
      { 
       alert('insidefunction'); 
      } 
    } 
    $.myNamespace.init(); 
}); 

を。だから私はその機能をどのように呼び出すことができますか、それとも私の概念が間違っていますか?絶対にクリックハンドラ内でそれを呼び出す

+0

をどのように() '' this.anotherFunctionについて、あなたは別のコンテキストに物事を結合しなかったと仮定すると? – rjz

+0

実際に私はそれもやってみました... "機能ではありません"というエラーがまだ戻ってきます。 –

答えて

1
jQuery(document).ready(function($) 
{ 
    $.myNamespace = { 
      init: function() 
      { 
      var a=this; 
      $('.button').click(function() { 
        a.anotherFunction(); 
      }); 
      }, 
      anotherFunction: function() 
      { 
       alert('insidefunction'); 
      } 
    } 
    $.myNamespace.init(); 

}); 

http://jsfiddle.net/ZpAtm/2/

+0

ああ申し訳ありません、それはタイプミスでした...私はちょうどそれを修正しました.. –

+0

はい動作するか、私はあなたもすることができます:$ .myNamespace.anotherFunction()...しかし、 antoherFunctionを別にするには?最初に "init"関数の中に入れても問題ないでしょうか? –

+0

@Rickはい、あなたもそうすることができます。 – qw3n

0

任意のjQueryのイベントハンドラ内thisがイベントを発生させた要素に設定されているように、物事を変更します。

代わりに、次のパターンを使用してみてください:

jQuery(document).ready(function($) { 
    $.myNamespace = (function() { 
     function init() { 
      $('.button').click(function() { 
       anotherFunction(); 
      }); 
     } 

     function anotherFunction() { 
      alert('insidefunction'); 
     } 

     // return an object with all the functions you want 
     // available publically as properties. Don't include 
     // any "private" functions. 
     return { 
      init: init, 
      anotherFunction: anotherFunction 
     }; 
    })(); 
    $.myNamespace.init(); 
});​ 
+0

その洞察に感謝します。衝突を防ぐために名前空間を持つだけでこれを行うのであれば、文字通りすべて(すべての関数)を "init"の中に置くことができます。それは正しいでしょうか? –

+0

@Rickはい、私はそれも動作すると信じています。 Javascriptが新しいスコープを作成する唯一の時間は、関数の内部です。他のブロック( 'if'、' for'など)は新しいスコープを作成しません。また、JS "ホイスト"の原理を理解していることを確認してください。 – GregL

関連する問題