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

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

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

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

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

Переключение механизмов сценариев Ключевые правила: не является вариантом. :)

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
2 018
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

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

Ответ принят как подходящий

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

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

Я хлопнул себя по лбу вскоре после того, как задал вопрос. Это, конечно, помогло. Спасибо!

David Eyk 19.09.2008 21:43

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

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

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