【问题标题】:jquery calling a function from var valuejquery从var值调用函数
【发布时间】:2010-01-10 02:03:09
【问题描述】:
(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(); 这行是错误的,它只是为了展示我想要完成的工作

【问题讨论】:

    标签: jquery function call


    【解决方案1】:

    您的代码有一些问题:

    首先,当你运行它时,你最终会得到三个全局变量,max_minoptions

    JavaScript 是函数作用域的,但是你应该使用var 语句来声明变量,如果你不使用它,并且你进行赋值的标识符在作用域链中找不到,它们将成为属性全局对象 (window)。

    其次,我认为你想调用一个作为字符串参数传递的函数,如果是这样,我建议你使用一个对象来对你的函数进行分组,并能够获取它们,如果你只是定义你的函数作为变量,它们不绑定到可访问的对象(技术上,变量、参数和函数声明标识符绑定到不可访问的 Variable Object),例如:

    (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 参数执行它。

    【讨论】:

    • 谢谢。这对我的第一个问题有所帮助...对于我的第二个问题... min 原来不是私人功能。但是,如果第一个字符 = "" 使用 substr(0,1),我可以使用一些看起来像的东西。除非有其他技巧:) 将函数 _min 设为私有函数
    • 如果您希望您的 min 函数只能在 $.fn.myFoo 函数中访问,但不能通过您的 String 参数调用,请在我的示例中将其从 functions 对象中取出,并声明它使用var 语句,即:`var min = function () {};
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-05
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    • 2013-07-27
    • 1970-01-01
    • 2011-04-02
    相关资源
    最近更新 更多