Часть стандарта ECMA, я считаю, что консоли Javascript будут отображать объекты как массивы, когда объекты похожи на массивы.
Такие, как: [ "hello", "world" ] для объекта, содержащего строки, индексированные цифрой.
Массивное поведение определяется как свойство длины и метод сращивания, присутствующий на объекте, а также численные индексированные свойства.
Многие из нас, вероятно, видели это с помощью jQuery в прошлом.
Я пытаюсь воспользоваться этим поведением и считаю это желательным. Однако у меня есть дополнительное требование, чтобы мои индексы использовали геттеры/сеттеры для их установки, чтобы я мог выполнять некоторую дополнительную обработку, когда они были изменены.
Однако, когда я делаю это, вышеупомянутый массив вместо этого отображается как:
[undefined × 2]
Однако объект ведет себя иначе, как простой пример.
Смотрите этот скрипт для более лучшего объяснения: http://jsfiddle.net/5YgAv/
Итак, вы видите? Два очень похожих примера, однако наличие геттера сломало его в консоли.
Я отлаживал последний исходный код Chromium, и кажется, что Chrome нажимает на консоль сообщение, которое по существу содержит функцию getter. Однако нет способа изменить исходный код консоли, чтобы он мог вызвать функцию и получить значение. Если бы это было возможно, мы могли бы изменить инструменты разработчика, чтобы правильно обрабатывать геттеры и сеттеры.
То, что я хотел бы знать, - это то, что если кто-нибудь может понять эту интересную небольшую ошибку или как ее лучше всего исправить, прежде чем я зарегистрирую ее как ошибку с командой Chrome, которая будет забыта и похоронена в глубине Google, Я действительно очень хотел бы исправить это сам так или иначе.
Я также открываю обходное решение, которое элегантно и позволяет мне выполнять специальную обработку, когда изменяются какие-либо свойства в моем объекте, подобном массиву.
Помогите мне Оби-Стапокверпл-Кеноби, ты моя единственная надежда!
[Райана]