4 Stimmen

jQuery Plugin Tutorial Verwirrung

Ich muss etwas übersehen haben. Das jQuery-Plugin-Tutorial fand aquí Im Abschnitt "Namespacing" -> "Plugin-Methoden" findet sich die folgende Plugin-Deklaration. Was ich hier nicht verstehe, ist die Umfang der Methoden variabel; ich meine, sollte nicht Methoden als Variable in der QuickInfo definiert werden? Sobald diese anonyme Funktion ausgeführt wird, Methoden geht aus dem Geltungsbereich heraus, wenn ich das richtig verstehe, weil es als var innerhalb einer Funktion definiert ist. Wie kommt es, dass tooltip auf var-Methoden verweist, die außerhalb des Anwendungsbereichs liegen, wenn tooltip aufgerufen wird? Was übersehe ich?

(function( $ ){

  var methods = {
    init : function( options ) { // THIS },
    show : function( ) { // IS   },
    hide : function( ) { // GOOD },
    update : function( content ) { // !!! }
  };

  $.fn.tooltip = function( method ) {

    // Method calling logic
    if ( methods[method] ) {
      return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
    } else if ( typeof method === 'object' || ! method ) {
      return methods.init.apply( this, arguments );
    } else {
      $.error( 'Method ' +  method + ' does not exist on jQuery.tooltip' );
    }    

  };

})( jQuery );

7voto

Felix Kling Punkte 751464

Die Funktion, die der $.fn.tooltip ist eine Verschluss [Wikipedia] und hat daher Zugang zu allen höheren Bereichen.

Wenn die äußere Funktion zurückkehrt, methods wird nicht zerstört, da die Schließung weiterhin auf sie verweist.

1voto

Mrchief Punkte 72978

Es geht nicht genau aus dem Geltungsbereich heraus, da Ihr Plugin immer noch einen Verweis darauf enthält. In JS werden sie als Verschlüsse .

0voto

ShankarSangoli Punkte 68964

Das alles funktioniert wegen der Schließung. Die Funktion, die $.fn.tooltip zeigt, ist eigentlich ein Verschluss. Sie hat also Zugriff auf method Objekt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X