2010-08-30 4 views
2

Я стараюсь продлить JQuery, но когда я называю MyTest это вернет this.myTest.test() не определен ...Вызов внешней функции внутри функции в JQuery

может кто-то сказать мне, почему ...

(function($) { 
    $.fn.myTest=function() { 

     var x=function() { 
      this.myTest.test(); 

      var b = function() { 
       this.myTest.coba(); 
      } 
     } 

     x(); 

     return this.each(function(){ 
     }); 
    }; 

    $.fn.myTest.test = function(){ 
     alert('test'); 
    }; 

    $.fn.myTest.coba = function(){ 
     alert('coba'); 
    }; 

    $.fn.myTest.iseng = function(){ 
     alert('iseng'); 
    }; 
})(jQuery); 

ответ

2

Вы называете this.myTest.test(); внутри вложенной функции x. Таким образом, this не будет указывать на объект $.fn.myTest.

С этой же проблемой вы столкнулись с this.myTest.coba(); в функции b.

Чтобы решить, что вы должны хранить контекст $.fn.myTest объекта заранее к нему доступ:

$.fn.myTest=function() { 

    var self = this; 
    var x=function() { 
     self.myTest.test(); 

     var b = function() { 
      self.myTest.coba(); 
     } 
    } 

    x(); 

    return this.each(function(){ 
    }); 
}; 
+0

спасибо очень много ... эта работа .. – comenk

1

это внутри х() функция не является объектом JQuery, но это window, насколько я знаю. Вот что вам нужно ...

$.fn.myTest = function() { 
    var that = this; 
    var x=function() { 
     that.myTest.test(); 

     var b = function() { 
      that.myTest.coba(); 
     } 
    } 

    x(); 

    return this.each(function(){ 
    }); 
}; 
+0

благодарственное ... Я get'it сейчас .. – comenk

Смежные вопросы