Besseres Verständnis von Javascript durch Untersuchung von jQuery Elements

8

Da jQuery eine weit verbreitete und ausgereifte Zusammenarbeit ist, kann ich nicht anders, als auf seine Quelle zu schauen, um besseres JavaScript zu schreiben. Ich benutze die jQuery-Bibliothek die ganze Zeit zusammen mit meinen PHP-Anwendungen, aber wenn ich unter die Haube dieser ziemlich anspruchsvollen Bibliothek schaue, merke ich, wie viel ich immer noch nicht über Javascript verstehe. Lo, ich habe ein paar Fragen an die SO-Community. Betrachten Sie zuerst den folgenden Code ...

%Vor%

vs

%Vor%

Nun, heißt das, dass die attr() Methode entworfen wurde, um entweder einen Attributnamen, einen Attributnamen und einen Wert oder eine Paarwertkarte zu akzeptieren? Kann mir jemand eine kurze Erklärung geben, was eine Karte eigentlich ist und wie sie sich von einem Array in Javascript unterscheidet?

Weiter geht es mit der ganzen Bibliothek in diesem Geschäft ...

%Vor%

Ich, dass die verpackten Klammern ein ähnliches Verhalten wie bewirken body onLoad="function();" , aber was diese Praxis genannt wird und ist es anders als die onLoad Ereignishandler verwenden? Außerdem kann ich am Ende weder Kopf noch Zahl des Bits (window) machen. Was genau passiert hier mit dem Objekt window ?

Habe ich falsch in der Beurteilung, dass Objekte nicht anders sind als Funktionen in Javascript? Bitte korrigiere mich, wenn ich falsch liege, aber $() ist das alles umfassende jQuery-Objekt, aber es sieht wie eine Methode aus. Hier ist eine weitere kurze Frage mit einem Codebeispiel ...

%Vor%

... Sollte innen so aussehen (vielleicht irre ich mich da) ...

%Vor%

Ist dies die ständige Prozedur zum Definieren von Objekten und ihrer untergeordneten Methoden und Eigenschaften in Javascript? Vergleichen Sie Javascript mit PHP, verwenden Sie einen Punkt . genauso wie Sie -> verwenden würden, um eine Methode von einem Objekt abzurufen?

Ich entschuldige mich dafür, dass es ein bisschen langwierig ist, aber Antworten auf diese Fragen werden mir sehr viel über jQuery und Javascript im Allgemeinen offenbaren. Danke!

    
65Fbef05 22.06.2011, 13:44
quelle

4 Antworten

2

1. Überladen der Methode

$('#element').attr('alt', 'Ivan is SUPER hungry! lolz');

vs

$('#element').attr({'alt': 'Ivan is an ugly monster! omfgz'});

%Vor%

2. Verschlüsse

(function(window, undefined) { /* jQuery */ })(window);

Wird nicht als onload -Handler verwendet. Es erstellt einfach einen neuen Bereich innerhalb einer Funktion.

Dies bedeutet, dass var foo eher eine lokale als eine globale Variable ist. Es erstellt auch eine echte undefined Variable, die verwendet werden soll, da Parameter, die nicht angegeben sind, in undefined

übergeben werden

Dies gauds againts window.undefined = true das ist gültig / erlaubt.

  

das (Fenster-) Bit dort am Ende. Was genau passiert hier mit dem Fensterobjekt?

Es ist ein mikrooptimierter Fensterzugriff, indem es lokal gemacht wird. Der Zugriff auf lokale Variablen ist etwa 0,01% schneller als der Zugriff auf globale Variablen

  

Habe ich falsch in der Beurteilung, dass Objekte nicht anders sind als Funktionen in Javascript?

Ja und nein. Alle Funktionen sind Objekte. $() gibt nur ein neues jQuery-Objekt zurück, da intern return new jQuery.fn.init();

aufgerufen wird

3. Ihr Snippet

function $(var element = null) {

Javascript unterstützt keine Standardparameterwerte oder optionale Parameter. Um dies zu emulieren, gehen Sie folgendermaßen vor:

%Vor%
  

Vergleichen Sie Javascript mit PHP, verwenden Sie einen Punkt. auf die gleiche Weise, die Sie verwenden würden - & gt; eine Methode von einem Objekt abrufen?

Sie können auf Eigenschaften eines Objekts zugreifen, indem Sie foo.property oder foo["property"] verwenden. Eine Eigenschaft kann ein beliebiger Typ einschließlich Funktionen / Methoden sein.

4. Verschiedene Fragen, die in Ihrer Frage versteckt sind

  

Kann mir jemand eine kurze Erklärung geben, was eine Karte eigentlich ist und wie sie sich von einem Array in Javascript unterscheidet?

Ein Array wird mit var a = [] erstellt. Es enthält einfach eine Liste von Schlüsselwertpaaren, bei denen alle Schlüssel positive Zahlen sind. Es enthält auch alle Array methods . Arrays sind auch Objekte.

Eine Karte ist nur ein Objekt. Ein Objekt ist einfach eine Tasche von Schlüsselwertpaaren. Sie ordnen einige Daten unter einem Schlüssel für das Objekt zu. Diese Daten können beliebiger Art sein.

    
Raynos 22.06.2011, 14:00
quelle
1

Für attr , wenn Sie ein Objekt anstelle eines Schlüsselwertpaares angeben, wird es für jede Eigenschaft eine Schleife durchlaufen. Suche nach attr: in jQuerys Code, dann wirst du access verwenden. Dann suchen Sie nach access: und Sie werden sehen, es gibt eine Überprüfung auf den Typ von key , wenn es ein Objekt ist, starten Sie eine Schleife.

Das Wrapping in einer Funktion verhindert, dass auf den gesamten Code von außen zugegriffen wird, und verursacht unerwünschte Probleme. Die einzigen Parameter, die übergeben werden, sind window , die es erlauben, Globals zu setzen und auf das DOM zuzugreifen. Die undefined Ich denke, es ist die Überprüfung dieses speziellen Wertes schneller.

Ich lese manchmal jQuery, aber ich habe nicht damit begonnen, vielleicht solltest du ein paar gute Bücher bekommen, um dir zuerst eine Idee zu geben, was einige erweiterte Funktionen von Javascript haben, und dann dein Wissen auf die Besonderheiten von jQuery anzuwenden / p>     

Mic 22.06.2011 13:54
quelle
1

1 - Ja attr kann einen Attributnamen annehmen, um einen Wert, einen Namen und einen Wert für das Setzen eines Wertes oder eine Zuordnung von Attributnamen und Werten für Einstellungen mehr als ein Attribut zu erhalten

2 - Eine Karte ist im Grunde ein JavaScript object z. B.:

%Vor%

3 - (function(window, undefined) { /* jQuery */ })(window); wird etwas wie anonymous function genannt, da es keinen Namen hat. In diesem Fall wird es auch sofort ausgeführt.

Ein einfaches Beispiel wäre:

%Vor%

Dies unterscheidet es vom load-Ereignis, da es sich um eine Funktion und kein Ereignis handelt.

4 - window wird als Variable übergeben, da sie intern in jQuery

verwendet wird

5 - Objects und functions sind identisch, da alles in JavaScript ein object ist. jQuery macht so etwas:

%Vor%

6 - Ja, Sie können . verwenden, um value für object abzurufen, aber Sie können auch [] z. B.:

verwenden %Vor%

Ich hoffe, dies beantwortet Ihre vielen Fragen, lassen Sie es mich wissen, wenn ich etwas verpasst habe.

    
Tomgrohl 22.06.2011 14:08
quelle
0

jQuery 1.6.1

Der Test ist typeof key === "object"

Wenn das stimmt, dann haben Sie ein {....}

übergeben %Vor%     
mplungjan 22.06.2011 13:57
quelle