Che cos'è un'implementazione della tabella hash javascript che evita le collisioni dello spazio dei nomi degli oggetti?

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

Domanda

Prima di tutto: sto usando un'implementazione piuttosto oscura di javascript incorporato come motore di scripting per Adobe InDesign CS3. Questa implementazione a volte differisce dallo "standard". javascript, quindi il mio problema.

Sto usando la libreria jsdiff di John Resig ( fonte qui ) per confrontare selezioni di testo tra due documenti. jsdiff utilizza oggetti vaniglia come array associativi per mappare una parola dal testo a un altro oggetto. (Vedi le variabili " ns " e " os " in jsdiff.js, intorno alla linea 129.)

Il mio mal di testa inizia quando la parola "riflette" compare nel testo. & Quot; riflettere " è una proprietà di sola lettura predefinita sugli oggetti tutti . Quando jsdiff tenta di assegnare un valore sull'array associativo a ns ['reflection'], tutto esplode.

La mia domanda: c'è un modo per aggirare questo? C'è un modo per fare una tabella hash in javascript senza usare l'evidente oggetto vaniglia?

Regole di base: il cambio di motori di scripting non è un'opzione. :)

È stato utile?

Soluzione

Potresti essere " porre la domanda sbagliata " (come direbbe Raymond Chen); piuttosto che cercare di evitare l'uso degli oggetti vanilla, prova a cambiare il modo in cui i membri dell'array associativo sono nominati.

Il modo in cui proverei ad avvicinarmi a questo: invece di essere un membro dell'array ns [" reflection "], cambia il modo in cui jsdiff costruisce gli array in modo che il membro sia ns [" _reflect "] o alcuni altra variazione su questo.

Altri suggerimenti

Se l'implementazione JS in uso supporta il metodo hasOwnProperty per gli oggetti, è possibile utilizzarlo per verificare se una proprietà è stata impostata in modo esplicito per un oggetto o se la proprietà è ereditata dal suo prototipo. Esempio:

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

Bene, gli oggetti dati in JavaScript sono solo array associativi, non esiste davvero un'altra soluzione integrata per un hash. Potresti essere in grado di creare la tua hashtable psuedo avvolgendo una classe attorno ad alcuni array, anche se probabilmente ci sarà un notevole successo di prestazioni con il lavoro manuale coinvolto.

Solo una nota a margine che non ho mai usato o guardato nella libreria jsdiff, quindi non posso offrire alcuna idea valida per suggerimenti o trucchi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top