在javascript中定义模块内部的函数

在javascript中定义模块内部的函数,javascript,jquery,Javascript,Jquery,我试着定义一个函数attachPicker可以调用如下: (function(){ $.fn.tagPicker = function(source){ this.attachPicker(); } })(jQuery); 我试过: (function(){ $.fn.tagPicker = function(source){ this.attachPicker(); //define attachPicker $.fn.attach

我试着定义一个函数attachPicker可以调用如下:

(function(){
  $.fn.tagPicker = function(source){
    this.attachPicker();
  }
})(jQuery);
我试过:

(function(){
    $.fn.tagPicker = function(source){
      this.attachPicker();
      //define attachPicker
      $.fn.attachPicker = function(){
        //code here
      }
    }
 })(jQuery);


(function(){
      $.fn.tagPicker = function(source){
          this.attachPicker();
          //define attachPicker
          this.attachPicker = function(){
            //code here
          }
      }
})(jQuery);
两人都扔掉了

Uncaught TypeError: Object [object Object] has no method 'attachPicker' 
如果我有

(function(){
      $.fn.tagPicker = function(source){
        this.attachPicker();
      }
      $.fn.attachPicker() = function(){ //codes here };
})(jQuery);
成功了。但是我想在tagPicker中定义attachPicker,以便它可以访问源代码。任何人都可以解释为什么我试过的那些不起作用,并给我一些建议吗?当然,我知道如果在外部定义attachPicker,我可以将source作为参数传递。
提前谢谢

在使用任何函数之前,您应该定义该函数

试试这个代码

(function(){
      $.fn.tagPicker = function(source){

          //define attachPicker
          this.attachPicker = function(){
            //code here
          }
          this.attachPicker();
      }
})(jQuery);
您可以在此处进行测试: 也可以通过对象调用它:

更改函数的顺序,以便调用时存在
附件选择器
。这些URL将进一步澄清您的问题
http://stackoverflow.com/questions/587954/best-practices-for-declaring-functions-inside-jquery-ready-function
http://stackoverflow.com/questions/3887408/javascript-function-declaration-and-evaluation-order