Important Announcement
PubHTML5 Scheduled Server Maintenance on (GMT) Sunday, June 26th, 2:00 am - 8:00 am.
PubHTML5 site will be inoperative during the times indicated!

Home Explore Секреты javascript ниндзя

Секреты javascript ниндзя

Published by mr.oleg-nk, 2015-09-19 16:04:08

Description: Секреты javascript ниндзя

Search

Read the Text Version

Глава 1 О. Операторы with 265docume n t . body . s t y l e . Благодаря этому достигается упрощенное до предела видоиз·менение объекта стилевого оформления элемента модели DOM. А вот еще один при·мер из той же библиотеки base2:var Rect = Base . extend ( { w i dt h , height ) { const ructor : funct ion ( left , top, this . left = left ; this . top = top; thi s . width = width; this . height = he ight ; this . right = left + width; this . bott om = top + he ight ; },contains : function ( x , у ) { with ( this } return х >= l e ft & & х <= r i ght & & у >= t op & & у <= bot t om;},toString : function ( ) with ( thi s } return [ left , top, width, height ] . j oin ( \" , \" ) ; })); В этом, втором примере из библиотеки base2 оператор wi th применяется как сред­ство простого доступа к свойствам экземпляра объекта. Как правило, такой код полу­чается намного более длинным, но его можно сократить с помощью оператора wi th,который в данном случае вносит в код столь необходимую ясность. И последний, приведенный н иже пример взят из расширения Fircbug браузераFirefox для разработчиков.const evalScript Pre = \"with ( scope . vars } { with (_scope_ . api ) { \" + \" with ( scope_ . userVars ) { with ( window ) { \" ;const evalScriptPost = \" } } } } \" ; Эти строки кода из расширения Firebug служат особенно сложным примером при·менения оператора wi th в общедоступном фрагменте кода. В данном случае речь идето применении оператора wi t h в отладочной части расширения Firebug, где пользо­вателю предоставляется доступ к локальным переменным, прикладному интерфейсуAPI и глобальному объекту, причем все это доступно из кoнcoли javaScript. Подобныеоперации обычно не выполняются в большинстве приложени й , но они наглядно де­монстрируют потенциальные возможности оператора wi th для упрощения фрагмен·тов сложного кода нajavaSc1ipt. В приведенном выше примере кода из расширения Firebug особое внимание при·влекает двукратное применение оператора w i t h , обеспечивающее предшествованиеобъекта w indow другим вводимым объектам. Как было показано в примере кода из ли­стинга 1 0. 1 , при возни кновени и конфликта и мен объект из области действия опера·тора wi th обычно имеет приоритет над значениями из глобальной области действия.Структурирование кода следующим образом :with ( х ) { with ( window ) { }}

266 Частъ 111. Обучение кандидата в мастерапозволяет ввести свойства объекта х с помощью оператора wi t h , отдавая в то же времяисключительный приоритет глобальным переменным при возни кновении конфликтаимен. А теперь рассмотрим еще одну область применения оператора wi t h .Импорт кода из пространства имен Как было показано ранее, оператор wi th чаще всего применяется для упрощенияуже существующих операторов, в которых имеются многочисленные ссылки на свой­ства объекта. Подобное чаще всего происходит в коде, размещаемом в пространствеимен, где одни объекты оказываются внутри других объектов, обеспечивая тем самыморганизованную структуру кода. Побочным следствием такого подхода становится не­приятная необходимость набирать каждый раз вручную имена пространств имен объ­ектов. В приведенном ниже фрагменте кода обе оператора выполняют одну и ту же опера­цию, используя библиотеку Y UI дляjavaScript. Запись первого оператора выглядит какобычно, а в записи второго употребляется оператор wi th.YAHOO . ut i l . Event . on ( [ YAHOO . ut i l . Dom . get ( ' i t em ' ) , YAHOO . ut i l . Dom . ge t ( ' othe r i t em ' ) ] , ' click ' , function ( ) { YAHOO . ut i l . Dom . s etStyle ( thi s , ' color ' , ' # сОО ' ) ;);with ( YAHOO . ut i l . Dom ) { YAHOO . ut i l . Event . on ( [ get ( ' i t em ' ) , get ( ' othe r i t em ' ) ] , ' c l i ck ' , function { ) { setStyle ( this , ' color ' , ' #сОО ' ) ; } ) ; Благодаря вводу единственного оператора wi t h код в данном примере существенноупрощается. А теперь попробуем выяснить, как себя проявляет оператор wi th во времятести рован и я .Тести р о ва н и е При тестировании отдельных функциональных возможностей в тестовом наборенеобходимо внимательно следить за некоторыми моментами . Главный из них заклю­чается в синхронизации методов утверждения и выполняемого в настоящий моментконтрольного примера. Как правило, это не вызывает особых затруднени й , но стан�вится особенно хлопотным, когда приходится иметь дело с асинхронными тестами .Распространенным выходом и з этого затруднительного положения является созданиецентрального объекта, отслежи вающего выполнение каждого теста. Модуль выполне­ния тестов, применяемый в библиотеках Pгototype и script.aculo.us, действует именнопо этому образцу, предоставляя упомянутый центральный объект в качестве контекстадля каждого прогона текста. Сам же этот объект содержит все необходимые методыутверждения, чтобы без особого труда накапливать результаты в одном центральномместе. Ниже приведен характерный тому пример.new Test . Unit . Runner ( { testSl iderBasics : funct ion ( ) { with ( this ) {


































































Like this book? You can publish your book online for free in a few minutes!
Create your own flipbook