Qu'est-ce qu'une implémentation de table de hachage javascript qui évite les collisions entre espaces de noms d'objets?

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

Question

Tout d’abord: j’utilise une implémentation assez obscure de javascript intégré en tant que moteur de script pour Adobe InDesign CS3. Cette mise en œuvre diverge parfois de " standard " javascript, d’où mon problème.

J'utilise la la bibliothèque jsdiff de John Resig ( source ici ) pour comparer les sélections de texte entre deux documents. jsdiff utilise des objets vanilla sous forme de tableaux associatifs pour mapper un mot du texte vers un autre objet. (Voir les variables "ns" et "os" dans jsdiff.js, autour de la ligne 129.)

Mes maux de tête commencent lorsque le mot "refléter" apparaît dans le texte. "réfléchir" est une propriété en lecture seule par défaut sur les objets tous . Lorsque jsdiff essaie d'assigner une valeur sur le tableau associatif à ns ['reflect'], tout explose.

Ma question: y a-t-il un moyen de contourner cela? Existe-t-il un moyen de faire une table de hachage en javascript sans utiliser l’objet vanilla évident?

Règles de base: le changement de moteur de script n'est pas une option. :)

Était-ce utile?

La solution

Vous pourriez "poser la mauvaise question". (comme dirait Raymond Chen); Au lieu d'essayer d'éviter d'utiliser les objets vanilla, essayez de modifier le nom des membres du tableau associatif.

La façon dont j'essayais de procéder: au lieu d’avoir un membre du tableau ns ["reflect"], changez la façon dont jsdiff construit les tableaux de sorte que le membre soit ns [" _reflect "] autre variante à ce sujet.

Autres conseils

Si l'implémentation JS que vous utilisez prend en charge la méthode hasOwnProperty pour les objets, vous pouvez l'utiliser pour vérifier si une propriété a été explicitement définie pour un objet ou si la propriété est héritée de son prototype. Exemple:

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

Les objets javascript bien donnés sont juste des tableaux associatifs, il n’existe vraiment aucune autre solution intégrée pour un hachage. Vous pourrez peut-être créer votre propre table de hachage psuedo en encapsulant une classe autour de tableaux, bien que le travail manuel en souffrira probablement considérablement.

Juste une note de côté que je n'ai pas vraiment utilisée ou consultée dans la bibliothèque jsdiff, je ne peux donc vous offrir aucune information valable, comme par exemple des astuces ou des astuces.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top