Главное Свежее   Проекты
Рекомендуем
Продвинуть свой проект
284 1 В избр. Сохранено
Авторизуйтесь
Вход с паролем

Ошибки в коде или "Так и должно было быть!"

Бывало ли такое, что, при написании какого-то ПО, вы, внезапно обнаруживаете ошибку, которая, вроде, и ошибка, но и, вроде, как ведет себя довольно необычно, да настолько, что вы решаете преподнести это как особенность? Нет? Ну, серьезно, не было такого? У нас вот было. И вылилось это в одну забавную фишку.

В процессе работы над NW.js IDE я внедрил туда эдакий "sandbox", который позволяет без вреда для основного контекста запускать JavaScript-программы в основном потоке. Это нужно было мне для отладки и тестирования, чтобы я мог корректно продумать реализацию системы перехвата событий при написании поддержки плагинов.

В процессе я часто пользовался командами console.log/error/info.., которые, в общем-то, вполне меня удовлетворяли ровно до тех пор, пока в рамках окна существовала консоль вывода. Как только я перешел в тестирование собранного приложения, консоль из сборки была убрана, так как программисту давать консоль основного окна смысла нет. Я начал писать свою собственную консоль вывода и отлова ошибок.

С такой консолью команды console не работают, да и объекта такого нет.

Для отлова ошибок я в первую очередь переопределил метод window.onerror, заставив его работать "на себя", далее, поскольку у меня есть возможности управлять родительскими и дочерними объектами "process" (это уже из NodeJS), я переопределил стандартные потоки ввода/вывода для удобства (stdin/stdout).

Это всё было вполне рабочим, и тут я по ошибке где-то написал console.log (вместо нативного $log, который сам же описал), начала выскакивать ошибка об отсутствии объекта console, что более, чем логично. Но я просто по инерции (задумался я на тот момент, кажется), определил объект console, в который встроил нужный метод log.

Всё заработало (в строгом режиме)!

И только после двух дней я внезапно осознал, что сделал. По факту это решило 50% вопросов, которые у меня должны были возникнуть как заставить мою консоль внутри приложения взаимодействовать с "песочницей", в которой уже работает сам программист (пользователь IDE). Я быстренько определил класс, и объектом этого класса стал глобальный объект "console", который реализует в себе вообще всё, что только может быть нужно программисту.

Таким образом, программист вообще не подозревает что и как устроенно внутри редактора, он просто пользуется привычными методами объекта console.

Так же я переопределил метод alert/prompt/confirm, чтобы они делали некоторые нужные мне вещи незаметно для пользователя.

Вот такая вот история о том, как невнимательность привела к тому, что я избавил сам себя от большинства плясок в будущем!

+3
В избр. Сохранено
Авторизуйтесь
Вход с паролем
Комментарии
Первые Новые Популярные
Sergey Girfanov
Мне так каждый второй программист говорит, так и должно быть, но потом исправляют конечно =)
Ответить
Выбрать файл
Блог проекта
Расскажите историю о создании или развитии проекта, поиске команды, проблемах и решениях
Написать
Личный блог
Продвигайте свои услуги или личный бренд через интересные кейсы и статьи
Написать