Frage

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

Frage 1 = ist es eine Möglichkeit, die max Methode / Funktion aufzurufen oben, wenn ich diese Zeile zu verwenden, $('#id').myFoo('max'); Frage 2 = Ich weiß, dass auf jquery Widgets einen Unterstrich „_“ würde die Methode als privat kennzeichnen. ist dies der gleiche Fall auf dem $ .FN?

Beachten Sie, dass die Linie return this.o(); es falsch ist, dass es da nur um zu zeigen, was ich erreichen möchte

War es hilfreich?

Lösung

Ihr Code hat einige Probleme:

Zuerst, wenn Sie es ausführen, werden Sie mit drei globalen Variablen am Ende, max, _min und options.

JavaScript ist funktions scoped, aber Sie sollten die var Anweisung Variablen deklarieren, wenn Sie es nicht verwenden, und die Kennung Sie die Zuordnung zu machen ist nicht im Umfang Kette gefunden, werden sie Eigenschaften des geworden Globlal Objekt (window).

Zweitens denke ich, dass Sie eine Funktion als String-Argument übergeben aufrufen wollen, wenn das heißt, Sie würde ich Ihnen empfehlen, ein Objekt zu gruppieren Sie Ihre Funktionen zu nutzen, und in der Lage, sie zu erhalten, wenn Sie nur Ihre Funktionen definieren als Variablen, werden sie zu einem zugänglichen Objekt nicht gebunden ( technisch Variablen, werden die Argumente und Funktionsdeklaration Kennungen an den nicht zugänglich gebunden Variable Object ), zB:

(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:. Wenn Sie eine "private-Funktion" deklarieren wollen, (nicht aufrufbaren durch Ihr String-Argument), können Sie einfach erklären ihn als Variable in der $.fn.myFoo Funktion

Es wird von allen Ihre „öffentlichen Funktionen“ (alle Mitglieder des functions Objekt) verwendbar sein, aber Sie werden es nicht Ihre o Argument ausführen können, zu verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top