15.05.2013, 01:43
|
Профессор
|
|
Регистрация: 31.05.2012
Сообщений: 396
|
|
Сообщение от eugenk
|
Прошу прощения, можно поподробнее, что это такое ??? Я новичок, просьба не пинать если чего-то не знаю
Еще раз прошу прощения, но доки это немного не то. Пример.
У меня есть массив panels, в котором я храню объекты типа Panel, в которых в свою очередь хранится описание физических свойств панелей моего менеджера базы данных. Например высота и ширина панели, число строк текста и т.п. Т.е. объект типа Panel является строго определенным. Он содержит четко определенные поля и ничего более. А глобальная переменная panels хранит только объекты типа Panel и ничего более. В программе я пишу:
var panel=panels[pan];
panel.width=200;
Никаие доки не помогут определить среде, что panel это объект типа Panel, который содержит поле width, но не содержит поля widht. Если бы тип Panel был известен, во-первых как только я написал бы panel. сразу появился бы автокомплит, который подсказал бы поле width. Во-вторых, если я все-таки напишу panel.widht, в нормальном языке компилятор бы выругался на несуществующее поле. В javascript panel.widht=200 будет понято как желание ввести в объект panel новое поле widht и присвоить ему значение 200. Поле width при этом разумеется не изменится и программа нормально запустится. После чего придется очень долго выяснять в отладчике, почему ширина панели не меняется. Я говорю исключительно об этих проблемах. Документирование на JSDoc тут не спасет.
|
Чтобы выловить такие ошибки, можно использовать Object.seal на всех объектах этого типа сразу после добавления всех необходимых свойств (и включить строгий режим, чтобы выскакивала ошибка при неправильных действиях). Или более мягкий вариант - Object.preventExtensions.
Последний раз редактировалось oneguy, 15.05.2013 в 01:47.
|