2011-01-10 10 views
3

Ich verstehe, dass Sie eine Methode wie folgt aufrufen, wenn Sie $.fn erweitern.

($ == jQuery)

//$("div").myMethod(); 

$.fn.extend({ 
    myMethod: function(){...} 
}); 

Und so, wenn Sie erweitern die jQuery-Objekt:

//$.myMethod2(); 

$.extend({ 
    myMethod2: function(){...} 
}); 

Aber ich verstehe nicht ganz, was die $() hier tut:

// Es gibt ein paar Methoden, die hier genannt werden. Einige mit dem gleichen Methodennamen (initiieren), was schlecht ist.

// Aber vielleicht ist das, warum das leere jQuery-Objekt, so dass die Methodennamen benötigt wird, kollidieren nicht

$(function() { 

    $().functionName({ 
     something: 'something' 
    }).myMethod(); 

    $().func1({ 
     x: 1 
    }).initiate(); 

    $().func2({ 
     y: 2 
    }).initiate(); 

}); 

Ist es mit der Tatsache zu tun hat, wobei das Verfahren der Funktionsnamen aufgerufen wird?

Vielen Dank im Voraus und hoffe, das macht Sinn.

Antwort

3

$() erstellt ein leeres jQuery-Objekt (Wrappet-Set). Ich würde nicht wissen, warum jemand so etwas tun würde. Im Grunde rufen Sie functionName und myMethod auf einem leeren Satz von Elementen = nichts sollte passieren.

jQuery().css({ 
    'foo': 'bar' 
}).show(); 
+0

Ich weiß nicht, warum jemand es entweder tun würde, aber wenn man bedenkt, dass es eine Frage über benutzerdefinierte Funktionen, können wir nicht wissen, dass nichts wird passieren. '$ .fn.extend ({test: function() {alert ('das wird passieren');}}); $(). test(); ' –

+0

@David: du hast Recht. Natürlich würde der Code dieser Methoden ausgeführt werden. Aber es gibt keinen Grund, solche Methoden im jQuery '.fn'-Namespace zu haben, da sie nicht auf umschlossene Elemente einwirken können. – jAndy

+0

stimme ich völlig zu. OP hat höchstwahrscheinlich auf Code gestoßen, der von jemandem geschrieben wurde, der nicht wusste, was sie tun würden, aber ich wäre überrascht, wenn der vorliegende Code überhaupt nichts tun würde. –

1

Bevor jQuery 1.4 jQuery() Aufruf würde die gleiche wie jQuery(document) gewesen. Seitdem wurde es geändert, um stattdessen ein leeres Set zurückzugeben. Also seit jQuery 1.4, jQuery() ist das Äquivalent von jQuery([]). Letzteres war und ist der empfohlene Weg, um einen leeren Satz zu bekommen, nur um sicherzustellen, niemanden zu verwirren.

Wie auch immer, meine Vermutung ist, dass der Code, nach dem Sie fragen, alt ist und eine veraltete Methode verwendet, um auf den document Knoten zuzugreifen, ganz zu schweigen davon, dass es eine schlechte Übung war, dies auch damals zu tun. $() wird wahrscheinlich $ oder $(document) sein.

Aber das heißt nicht, dass ein leerer jQuery-Satz falsch oder nutzlos ist. Adam Kiss hat eine post on his blog über die Nützlichkeit von leeren Sätzen geschrieben.

Und schließlich einige andere Möglichkeiten, jQuery erweitern:

(function($){ 
    $.myMethod = function() { 
    }; 

    $.fn.myMethod = function() { 
    }; 
})(jQuery); 
+0

Okay, das macht Sinn. Vielen Dank für Ihre Antworten. Ich denke, alter dodgy Code ist in gewisser Weise gut, da man dadurch tiefer in die Dinge eintauchen kann :) – MBax