bobby: jQuery Variablenübergabe (mal wieder)

Beitrag lesen

Moin,

Was vor allem spart, ist, Ergebnisse von DOM-Abfragen in Variablen abzulegen, wenn man diese mehrfach braucht, statt das DOM erneut danach zu befragen.

// mal ganz abgesehen davon, dass man die Methodenaufrufe auch chainen/verketten kann ...

var $foo = $('.foo');
$foo.text('bar');
$foo.click(function () {...});

// statt

$('.foo').text('bar');
$('.foo').click(function () {...});

Das mach ich ja jetzt mit meinem elem schon. ;) Es gab halt nur Abfolgeprobleme...

Nebenbei: Bei jQuery gibt es eine ungeschriebene Konvention, dass man Variablen, die jQuery-Objekte referenzieren, mit einem $ beginnt. Dann weiß man, dass man darauf weitere jQuery-Methoden anwenden kann.

var $foo = $('#foo'); // jQuery-Objekt
var foo = $foo[0]; // plain old DOM object

Oh... OK, werde ich zukünftig beachten

Dieser Ansatz nennt sich IIFE (immediately invoked function expression = sofort aufgerufener Funktionsausdruck) und hat üblicherweise noch ein Klammerpaar mehr (vor dem function und nach dem }). Das "gegen außen geschützt" ist so eine Sache. Da Objekte per Referenz übergeben werden, ist nur die Referenz selbst geschützt, nicht aber das Objekt. Das heißt, der Garbage Collector räumt das Objekt nicht weg, weil noch die Referenz in der IIFE darauf verweist (solange da was lebendes drin ist oder darauf referenziert). Aber überall da, wo man eine Referenz auf das Objekt hat, kann man seinen Inhalt ändern, denn der ist nicht "geschützt". Um ihn zu separieren, muss man einen Clone anlegen, der mehr oder weniger tief die Eigenschaften des Objekts und die Ziel-Objekte der von ihm gehaltenen Referenzen kopiert.

Danke für die Ausführungen. Man lernt doch nie aus

Gruß Bobby

--
-> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <- ### Henry L. Mencken ### -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <- ### Viktor Frankl ### ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)