2010-01-10 58 views
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 =有一个方法调用上述最大值方法/功能,如果我是使用这条线 $('#id').myFoo('max'); 问题2 =我知道,上jquery的部件下划线“ _“会将该方法标记为私有。这是$ .fn上的相同情况吗?jquery的调用从VAR值的函数

请注意此行return this.o();是错的只是为了证明我想完成

回答

2

你的代码是什么有一些问题:

首先,当你运行它,你最终将有三个全局变量,max,_minoptions

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函数中的一个变量。

它可供所有“公共职能”(functions对象的所有成员)使用,但无法使用o参数执行。

+3

+1使用'return this;' – 2010-01-10 02:16:37

+0

谢谢。这有助于我的第一个问题......对于我的第二个问题...... _min原来不是一个私人函数。但是我可以使用substr(0,1)的东西,看看第一个字符=“_”。除非有另一个诀窍:)将函数_min作为私有函数 – Val 2010-01-10 02:21:48

+1

如果您希望您的'min'函数只能在'$ .fn.myFoo'函数内访问,但不能通过String参数调用,请将其取出从我的例子中的'functions'对象,并用'var'语句声明它,即:'var min = function(){}; – CMS 2010-01-10 02:26:19