(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();
行是错误的,只是在那里展示我想要完成的事情
答案 0 :(得分:2)
您的代码存在一些问题:
首先,当您运行它时,您将得到三个全局变量,max
,_min
和options
。
JavaScript是函数范围的,但你应该使用var
语句来声明变量,如果不使用它,并且你在作用域链中找不到你所赋予的标识符,它们将会成为Globlal对象的属性(window
)。
其次,我认为你想调用一个作为String参数传递的函数,如果是这样的话,我建议你使用一个对象来分组你的函数,并且如果你只定义你的函数就能得到它们作为变量,它们不绑定到可访问的对象(技术变量,参数和函数声明标识符绑定到不可访问的 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
函数中的变量。 / p>
它将可供所有“公共函数”(functions
对象的所有成员)使用,但您将无法使用o
参数执行它。