0
(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();是错误的,它只是为了展示我想要完成的事情

4

1 回答 1

2

您的代码有一些问题:

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

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

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

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

于 2010-01-10T02:14:33.460 回答