Что такое реализация хэш-таблицы javascript, которая позволяет избежать конфликтов пространства имен объектов?

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

Вопрос

Во-первых:Я использую довольно малоизвестную реализацию javascript embedded в качестве скриптового движка для Adobe InDesign CS3.Эта реализация иногда отличается от "стандартного" javascript, отсюда и моя проблема.

Я использую Библиотека jsdiff Джона Ресига (источник здесь) для сравнения выделенного текста между двумя документами.jsdiff использует ванильные объекты в качестве ассоциативных массивов для сопоставления слова из текста с другим объектом.(Смотрите переменные "ns" и "os" в jsdiff.js, около строки 129.)

Мои головные боли начинаются, когда в тексте появляется слово "отражать"."отражать" - это значение по умолчанию, доступно только для чтения собственность на ВСЕ Объекты.Когда jsdiff пытается присвоить значение в ассоциативном массиве ns['reflect'] , все взрывается.

Мой вопрос:есть ли способ обойти это?Есть ли способ создать хэш-таблицу в javascript без использования очевидного объекта vanilla?

Основные правила: переключение скриптовых движков - это не вариант.:)

Это было полезно?

Решение

Возможно, вы "задаете неправильный вопрос" (как сказал бы Рэймонд Чен).;вместо того чтобы пытаться избежать использования объектов vanilla, попробуйте изменить способ именования членов ассоциативного массива.

То, как я бы попытался подойти к этому:вместо элемента массива ns["reflect"] измените способ построения массивов в jsdiff таким образом, чтобы элементом был ns["_reflect"] или какой-либо другой вариант этого.

Другие советы

Если используемая вами реализация JS поддерживает метод hasOwnProperty для объектов, вы можете использовать его для проверки, было ли свойство явно задано для объекта или свойство унаследовано от его прототипа.Пример:

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

Хорошо заданные объекты в javascript - это просто ассоциативные массивы, другого встроенного решения для хэша на самом деле не существует.Возможно, вы сможете создать свою собственную псевдонимную хэш-таблицу, обернув класс вокруг некоторых массивов, хотя, вероятно, при ручной работе значительно снизится производительность.

Просто побочное замечание, которое я на самом деле не использовал и не просматривал библиотеку jsdiff, поэтому я не могу предложить какую-либо достоверную информацию в соответствии с советами или хитростями.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top