Pull to refresh

Comments 18

Вот именно. В VS уже 100 лет есть все функции отладки JS, которые так нравятся школьникам в Фаербагах :)
Незаслуженно обделили вниманием Venkman. На освоение может уйдет какое-то время, но, поверьте, оно быстро окупится.
Лично я про такой слышу первый раз, спасибо за ссылку.
Если вам нетрудно, в двух словах расскажите о его особенностях/достоинствах? А то трудно себе представить что-то лучшее, чем Firebug :)
Я не знаю как сейчас у Firebug дела с утечками памяти, но в свое время это было одной из причин перехода на Venkman. Отличий в принципе немного, Venkman более классический что ли, больше напоминает обычный IDEшный дебаггер, как в той же Visual Studio, например.
Ну и насколько мне известно у Firebug не все в порядке с отладкой XUL-приложений. Если ситуация изменилась, буду рад услышать об этом от знающих людей, потому что все еще очень уважаю этот девелоперский комбайн.
venkman — изначальный отладчик, поставлявшийся вместе с мозиллой, когда от нее еще не отпочковался файрфокс.
некоторое время спустя, он был доступен только для мозиллы/симанки, но затем его выпустили в виде фарфокс аддона.
именно как дебаггер, он лучше файрбаговского. там больше возможностей, нагляднее.
но, файрбаг замечателен интеграцией с дом-инспектором, навигатором по коду, стилями и т.д.

в общем, для глубоко яваскриптовых задач venkman рулит. для смешанных — файрбаг.
Девид Блейн скукожил все скроллбары на скриншотах.

Приятно, что драгонфлай уже вполне прилично смотрится на фоне остальных и даже попал в список стабильных.
Кстати, полезный совет для отлаживания скриптов в Опере:
Обычно во время отладки нужно перезагружать страцу, дабы посмотреть поведение при разных действиях. Но обычно получать новый код с сервера не требуется, нужно чтобы просто браузер переоткрыл страницу, заново отрендирил то, что есть у него в кеше. Я использую для этого жест «GestureDown, GestureUp» который по умолчанию забит под перезагрзку. Чтобы у себя сделать так-же нужно в «Инструменты—настройки—дополнительно—управление—профили мыши—правки—application—GestureDown, GestureUp» поставить «Refresh display». Иногда бывает полезно не только во время отладки, а просто когда нужно «сбросить» скрипты на странице, а перезагружать с сервера не нужно.
Если не ошибаюсь, то ключевое слово debugger (создание breakpoint в скрипте) актуально только для IE.
Отлично вылетает при разрешенных настройках отладки в IE, и установленном MS Script Debugger или VS

На практике в 99% случаев пошаговая отладка не нужна, достаточно видеть место вылета. Дальше прямо в консоли подтвердить/опровергнуть догадку :).
И если в Opera и FF это видно в error console, то в IE реальное место помогает определить Script debugger (dev toolbar пользовал очень давно в альфах, посему не могу сказать с уверенностью).
Случаи с пошаговой отладкой (лично в моем оптыте за десяток лет) единичны.

За статью респект, возможно очень поможет многим людям. Можно было наврное включить сюда и Хромого. Консоль и инспектор в нем есть.
упс, не сразу понял, что перевод :(
странно… я наоборот очень часто использую именно пошаговую отладку.
а знать «место вылета» это как-то однобоко — нет полной картины работы скрипта, да и всего приложения.
тут спреведливо наверное сказть следующее.

если скрипт пишется самостоятельно, то место вылета сразу наводит на мысль, откуда «ноги растут»
если пользуется сторонняя либа, то пошаговая отладка будет эффективнее.

возможно, не так часто пользовал сторонние либы.
Object.clone = function(originalObject) {
var obj = {};
for (var prop in originalObject) {
obj[prop] = originalObject[prop];
}
return obj;
}


Вы всё равно не решили проблему, так как в прототип может написать другая библиотека, другой программист, или вам когда-нибудь самому понадобится.
Решением будет

Object.clone = function(originalObject) {
var obj = {};
for (var prop in originalObject) {
if(originalObject.hasOwnProperty(prop))
obj[prop] = originalObject[prop];
}
return obj;
}


К тому же вариант с добавлением функции в prototype мне нравится больше.
Можно использовать переопределение функции для других типов
Object.prototype.clone = function() {… }
Date.prototype.clone = function() {… }
MyClass.prototype.clone = function() {… }

Тогда clone будет работать прозрачно для любых объектов.
И возможно правильнее будет дописать саму функцию
не копировать функции
при копировании объектов — копировать их не по ссылке, а их функцией clone
тоже самое с массивами
Посмотрите пожалуйста внимательнее на футер статьи, между датой и моим ником :)
Sign up to leave a comment.

Articles