2010-01-10 7 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); 

Question 1 = est-il un moyen d'appeler la méthode/fonction max au-dessus si je devais utiliser cette ligne $('#id').myFoo('max'); Question 2 = Je sais que sur jquery widgets un trait de soulignement " _ "marquerait la méthode comme privée. est-ce le même cas sur le $ .fn?jquery appeler une fonction de la valeur var

Notez que la ligne return this.o(); il est faux de son juste là pour montrer ce que je voudrais accomplir

Répondre

2

Votre code a quelques problèmes:

Tout d'abord, lorsque vous l'exécutez, vous finirez avec trois variables globales, max, _min et options.

JavaScript a une portée de fonction, mais vous devez utiliser l'instruction var pour déclarer des variables. Si vous ne l'utilisez pas, et que l'identificateur que vous faites n'appartient pas à la chaîne de portée, elles deviendront des propriétés de l'objet Globlal (window). Deuxièmement, je pense que vous voulez appeler une fonction passée en argument String, si c'est le cas, je vous recommande d'utiliser un objet pour regrouper vos fonctions, et de pouvoir les obtenir, si vous définissez simplement votre fonctions en tant que variables, ils ne sont pas liés à un objet accessible (des variables techniquement, les arguments et les identifiants de déclaration de fonction sont liées à la non accessibleVariable Object), par exemple:

(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); 

Edit: Si vous voulez déclarer une "fonction privée", (non invocable via votre argument String), vous pouvez simplement déclarer un s une variable dans la fonction $.fn.myFoo.

Il sera utilisable par toutes vos "fonctions publiques" (tous les membres de l'objet functions) mais vous ne pourrez pas l'exécuter en utilisant votre argument o.

+3

+1 pour utiliser 'return this;' –

+0

merci. cela m'a aidé avec ma première question ... pour ma deuxième question ... _min s'avère ne pas être une fonction privée. Cependant, je pourrais utiliser quelque chose qui pourrait ressembler si le premier caractère = "_" en utilisant le substr (0,1). sauf s'il y a une autre astuce :) pour faire de la fonction _min une fonction privée – Val

+1

Si vous voulez que votre fonction 'min' ne soit accessible que dans la fonction' $ .fn.myFoo' mais ne soit pas invocable via votre argument String, retirez-la à partir de l'objet 'functions' dans mon exemple, et le déclarer avec l'instruction' var', c'est-à-dire: 'var min = function() {}; – CMS

Questions connexes