JQuery вызов функции из значения VAR - PullRequest
0 голосов
/ 10 января 2010
(function($) {

$.fn.myFoo= function (o){
    this.element = $(this)

    options = jQuery.extend({
         name: "defaultName",
         size: 5,
         global: true
      }, o);

    _min = function (){ //am i private method?
        alert('dud');
    }
    max = function (){ //am i public method?
        alert('max');
    }
    return this.o(); //o= 'max'
}
})(jQuery);

Вопрос 1 = есть ли способ вызвать метод / функцию max выше, если бы я использовал эту строку $('#id').myFoo('max'); Вопрос 2 = я знаю, что на виджетах jquery подчеркивание "_" помечает метод как закрытый. это тот же случай на $ .fn?

обратите внимание, что строка return this.o(); неверна, просто чтобы показать, чего я хотел бы достичь

1 Ответ

2 голосов
/ 10 января 2010

Ваш код имеет некоторые проблемы:

Во-первых, при запуске вы получите три глобальные переменные: max, _min и options.

JavaScript имеет функциональную область, но вы должны использовать оператор var для объявления переменных, если вы его не используете, а идентификатор, который вы присваиваете, не найден в цепочке областей видимости, они станут свойствами объекта Глобал (window).

Во-вторых, я думаю, что вы хотите вызвать функцию, переданную в качестве аргумента String, если это так, вам я бы порекомендовал вам использовать объект для группировки ваших функций и иметь возможность получить их, если вы просто определите свои функции в качестве переменных они не привязаны к доступному объекту ( технически переменные, аргументы и идентификаторы объявления функции привязаны к недоступному объекту переменной ), например:

(function ($) {
  $.fn.myFoo= function (o){
    var privateFunction = function (){ 
      alert('private');
    };

    var functions = {
      _min: function (){ 
        alert('_min');
      },
      max: function (){
        alert('max');
      }
    };


    functions[o](); // invoke the function
    // ...
    return this; // preserve the jQuery method "chainability"
  };
})(jQuery);

Редактировать: Если вы хотите объявить «частную функцию» (не вызываемую через аргумент String), вы можете просто объявить ее как переменную в функции $.fn.myFoo.

Он будет использоваться всеми вашими "публичными функциями" (всеми членами объекта functions), но вы не сможете выполнить его, используя аргумент o.

...