Was ist eine JavaScript-Hash-Tabelle Implementierung, die Objekt-Namespace Kollisionen vermeidet?

StackOverflow https://stackoverflow.com/questions/103679

Frage

Zunächst einmal: Ich bin mit einer eher obskuren Implementierung von JavaScript als Scripting-Engine eingebettet für Adobe InDesign CS3. Diese Implementierung manchmal weicht von "Standard" JavaScript aktivieren, damit mein Problem.

Ich bin mit John Resig jsdiff Bibliothek ( Quelle hier ) Auswahl von Text zwischen zwei Dokumenten zu vergleichen. jsdiff verwendet Vanille Objekte als assoziative Arrays ein Wort aus dem Text zu einem anderen Objekt abzubilden. (Siehe die "ns" und "o" Variablen in jsdiff.js, um die Linie 129).

starten Meine Kopfschmerzen, wenn das Wort „reflektiert“ im Text kommt. "Spiegeln" ist ein Standard, read-only Eigenschaft auf alle Objekte. Wenn jsdiff versucht einen Wert auf dem assoziative Array zu ns zuweisen [ ‚spiegelt‘], alles explodiert.

Meine Frage: Gibt es eine Möglichkeit, um dieses? Gibt es eine Möglichkeit, eine Hash-Tabelle in Javascript zu tun, ohne das offensichtliche Vanille-Objekt zu verwenden?

Grundregeln: Schaltmotoren Scripting ist keine Option. :)

War es hilfreich?

Lösung

Sie könnten „fragen die falsche Frage“ (wie Raymond Chen sagen würde); anstatt zu versuchen, die Vanille-Objekte zu vermeiden, versucht die Art und Weise der assoziativen Array Mitglieder benannt ändern.

So wie ich versuchen würde, diesen Ansatz: Statt dort ein Array Mitglied ns sein [ „reflektieren“], die Art und Weise, dass jsdiff die Arrays baut so dass das Element ns [ „_ reflektieren“] oder eine andere Variation auf das.

Andere Tipps

Wenn die JS Implementierung Sie verwenden die hasOwnProperty Methode für Objekte unterstützt, können Sie es verwenden, um zu testen, ob eine Eigenschaft explizit für ein Objekt gesetzt worden ist oder die Eigenschaft von seinem Prototyp vererbt. Beispiel:

if(object.hasOwnProperty('testProperty')){
     // do something
}

Nun gegebene Objekte in JavaScript sind nur assoziative Arrays, es gibt wirklich keine andere in Lösung für einen Hash gebaut ist. Sie könnten in der Lage sein, eigenen psuedo hashtable zu schaffen, indem eine Klasse um einige Arrays Einwickeln obwohl es wahrscheinlich ein erheblicher Performance-Einbußen bei der manuellen Arbeit beteiligt sein wird.

Nur eine Randnotiz Ich habe nicht wirklich verwendet oder schaute auf der jsdiff Bibliothek, so kann ich keine gültige Einsicht bieten als je Tipps oder Tricks.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top