InJQueryIn der offiziellen Dokumentation wird der Benutzer aufgefordert, dass dies eine Low-Level-Methode, die verwendet werden soll(Daten)Methode, um es zu ersetzen. $.Data (Element, Schlüssel, Wert) können beliebige Daten an das DOM-Element anfügen, aber sollten es vermeiden, Speicherverluste verursacht durch Zirkelverweise, wie folgt:
Die jQuery.data ()-Methode ermöglicht es uns, DOM-Elemente in Daten keine Typs zuordnen ein und ist sicher von kreisförmigen Referenc ES und daher aus dem Gedächtnis leckt. Wir können mehrere unterschiedliche Werte auf ein einzelnes Element und später wieder abrufen:
Für diese Methode ist jedoch das bestehende Problem nicht nur das. In JQUERY FORUM wurde die Frage diskutiert, in die Tiefe, und robert.katic eine Lösung vorgeschlagen. $.data ()-Methode auf das Host-Objekt angewendet und der Lauf ist optimiert, aber mit der Methode auf das lokale paar Bild, kann das Ergebnis nicht zufriedenstellend sein. Ein Element unter normalen Umständen kann verwendet werden, indem die. ()-Methode löschen und löschen Sie die jeweiligen Daten zu entfernen. Jedoch für lokale Objekte, dies kann nicht vollständig gelöscht werden, und die zugehörigen Daten wird fortgesetzt, bis das Window-Objekt geschlossen wird. Wiederum gibt es diese Probleme bei Objekt da der Event-Prozessor (Handler) auch auf diese Weise gespeichert werden.
Der einfachste Weg, um dieses Problem zu lösen ist dann zum Speichern der Daten in eine der neuen Eigenschaften des lokalen Objekts. das
// ...
Wenn (elem.nodeType) {}
Cache [Id] = DataObject;
Elem [Expando] = ID;
} Else {}
Elem [Expando] = DataObject;
}
// ...
Jedoch sobald die Frage der Vererbung beteiligt war, gab es nichts, was die Methode tun könnte. Probe
Var Elternteil = {};
Var ChildA = Object.create (Elternteil);
Var ChildB = Object.create (Elternteil);
$.Data (Elternteil, "Foo", "Eltern-Wert");
Mai dieses Jahres ist sogar beabsichtigt
$.Data (ChildA, "Foo")
= ≫ "Eltern Wert"
$.Data (ChildB, "Foo")
= ≫ "Eltern Wert"
Dies kann nicht gewollt sein
$.Data (ChildA, "Foo", "ChildA Wert");
$.Data (Elternteil, "Foo")
= ≫ "ChildA Wert"
$.Data (ChildB, "Foo")
= ≫ "ChildA Wert"
Zunächst das Objekt, das Daten speichert nicht vorhanden ist, so erstellen Sie ein Objekt, um den neuen Wert zu speichern, wie in der
Nun versuchen wir das Objekt ChildA die gleichen Daten zu ändern.
Objekt ChildA existiert nicht für diese Daten so anscheinend entlang der Prototyp-Kette und das übergeordnete Objekt nur die Daten besitzt, und seinen Wert sofort überschrieben. Daher führt erhalten den Wert von "Foo" von zwei Objekten, über- und ChildB, "ChildA Wert" anstelle von "übergeordneten Wert".