Top Banner
Дэвид Флэнаган 5е издание Включает Ajax и DOM Создание активных вебстраниц JavaScript Подробное руководство
982
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript

JavaScript

OM x D Aja 5

The Definitive GuideFifth Edition

David Flanagan

2008

JavaScript. , 5 . . . . . . . .

. JavaScript. . . . : , 2008. 992 ., . ISBN 10: 5 93286 103 7 ISBN 13: 978 5 93286 103 5 JavaScript. . HTTP Ajax, XML , , JavaScript, , , , Flash JavaScript Java . I JavaScript. II , . , HTML , DHTML, , Ajax, XPath XSLT XML , Ajax. III Java Script (, , , , , , JavaScript 1.5 ECMAScript v3). IV JavaScript (API , DOM API Level 2 : XMLHttpRequest ). ISBN 10: 5 93286 103 7 ISBN 13: 978 5 93286 103 5 ISBN 0 596 10199 6 () , 2008Authorized translation of the English edition 2006 OReilly Media, Inc. This trans lation is published and sold by permission of OReilly Media, Inc., the owner of all rights to publish and sell the same. , . , , .

. 199034, , 16 , 7, . (812) 324 5353, www.symbol.ru. N 000054 25.12.98. 005 93, 2; 953000 . 14.02.2008. 701001/16 . . 62 . . 2000 . N 199034, , 9 , 12.

, .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1. JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201.1. JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 1.2. JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 1.3. JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 1.4. JavaScript. . . . . . . . . . . . . . . . . . . . . . . . . . 28 1.5. JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

I. JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 2.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 2.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 2.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 2.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 2.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 2.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 2.8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 3.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 3.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 3.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 3.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 3.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 3.7. null . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 3.8. undefined . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 3.9. Date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 3.10. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 3.11. Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 3.12. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 3.13. . . . . . . . . . . . . . . . . . 58

8

3.14. . . . . . . . . . . 60 3.15. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 674.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 4.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 4.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 4.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 4.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 4.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 4.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 775.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 5.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 5.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 5.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 5.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 5.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 5.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 5.8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 5.9. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 5.10. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 996.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 6.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 6.3. if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 6.4. else if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 6.5. switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 6.6. while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 6.7. do/while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 6.8. for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 6.9. for/in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 6.10. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 6.11. break . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 6.12. continue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 6.13. var . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 6.14. function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 6.15. return . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 6.16. throw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 6.17. try/catch/finally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 6.18. with . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 6.19. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

9

6.20. JavaScript . . . . . . . . . . . . . . . . . . . . . . . . 119

7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1227.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 7.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 7.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 7.4. Object . . . . . . . . . . . . . . . . . . 127 7.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 7.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 7.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 7.8. , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138

8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1398.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 8.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 8.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 8.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 8.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 8.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 8.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 8.8. . . . . . . . . . . . . . . . . . . . . . . . . 156 8.9. Function() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

9. , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1659.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 9.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 9.3. JavaScript . . . . . . . . . . . . . . . . . . . . . . 172 9.4. Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 9.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 9.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 9.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 9.8. : defineClass() . . . . . . . . . . . . . . . . . . . . . 194

10. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19810.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 10.2. . . . . . . . . . . . . . . . . . . . . . . . . . . 204 10.3. . . . . . . . . . . . . . . . . . . . . . . . 208

11. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21411.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 11.2. String . . . . . . . . . . . . . . . . . . . . 223 11.3. RegExp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226

10

12. Java . . . . . . . . . . . . . . . . . . . . . 22912.1. JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 12.2. Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237

II. JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24913. JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25113.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 13.2. JavaScript HTML . . . . . . . . . . . . . . . . . 258 13.3. HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 13.4. JavaScript URL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 13.5. JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 13.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 13.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 13.8. JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 13.9. JavaScript . . . . . . . . . . . . . 285

14. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28714.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 14.2. Location History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 14.3. Window, Screen Navigator . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 14.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297 14.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 14.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303 14.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304 14.8. . . . . . . . . . . . . . . . . . . . . . . . 306 14.9. : . . . . . . . . . . . . . . . . . . . . . . . . . . . 311

15. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31415.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 15.2. Document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 15.3. DOM: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 15.4. W3C DOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 15.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334 15.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335 15.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339 15.8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343 15.9. : . . . . . . . . . . . . . . . . . . . . . 351 15.10. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 15.11. IE 4 DOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357

11

16. CSS DHTML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36016.1. CSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361 16.2. CSS DHTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370 16.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386 16.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395 16.5. CSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396 16.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397

17. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40317.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404 17.2. DOM Level 2 . . . . . . . 414 17.3. Internet Explorer . . . . . . . . . . . . . . . . . . . . . 425 17.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435 17.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440 17.6. onload . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449 17.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450

18. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45318.1. Form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454 18.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455 18.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459 18.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467

19. Cookies . . . . . . . 47219.1. cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472 19.2. cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475 19.3. cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476 19.4. cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477 19.5. cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481 19.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493

20. HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49420.1. XMLHttpRequest . . . . . . . . . . . . . . . . . . . . . . . . 495 20.2. XMLHttpRequest . . . . . . . . . . . . . . . . . 502 20.3. Ajax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509 20.4. HTTP . . . . . . 516

21. JavaScript XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51821.1. XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518 21.2. XML c DOM API . . . . . . . . . . . 524 21.3. XML XSLT . . . . . . . . . . . . . . . . 528 21.4. XML XPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531

12

21.5. XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536 21.6. HTML XML . . . 537 21.7. XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540 21.8. E4X: EcmaScript XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543

22. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54622.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547 22.2. CSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555 22.3. SVG . . . . . . . . . . . . . . . . . . . . . . 562 22.4. VML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569 22.5. . . . . . . . . . . . . . . . . . . . . . 572 22.6. Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576 22.7. Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581

23. Java Flash . . . . . . . . . . . . . . . . . . . . 58823.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590 23.2. Java . . . . . . . . . . . . . . . . . . . . . . . . . . 592 23.3. JavaScript Java . . . . . . . . . . . . . . . . . 593 23.4. Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597 23.5. Flash 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605

III. JavaScript . . . . . . . . . . . . . . . . . . . . . 607 IV. JavaScript . . . . . . . . . . . . . . . . . . 721 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 946

JavaScript. (Document Object Model, DOM), (Application Pro gramming Interface, API) JavaScript, , , , . , (JavaScript 1.5), . JavaScript . JavaScript , HTTP, XML . JavaScript , . Ajax Web 2.0.

, JavaScript, 8, ; , . 9. 10 , , . , 12 , JavaScript Java. , JavaScript Java 6, JavaScript Java . , JavaScript, ( 0) DOM W3C. DOM , , . ; : 19 Cookies cookies , .

14

20 HTTP , HTTP , XMLHttpRequest, Ajax . 21 JavaScript XML , JavaScript , , , , , XML . , JavaScript, E4X. 22 JavaScript. , . , SVG , VML , Flash Java . 23 Java Flash Flash Java . , Flash Java .

III JavaScript. , API. 4 , . , (DOM API), JavaScript. , JavaScript. Document , HTMLDocument . DOM, , . , NodeIterator , . , DOM JavaScript , . , getComputedStyle() AbstractView, Window, . JavaScript , , AbstractView, . , JavaScript, .

1 JavaScript. . , 1, JavaScript. 2 6 , , . . , :

15

2 . 3 , JavaScript. 4 , , . 5 JavaScript , . JavaScript Java, , , C C++, , , . 6 JavaScript . , C, C++ Java, , .

. JavaScript, , , C Java. JavaScript, . 7 JavaScript. 8 , , , JavaScript. 9 , JavaScript. , . , JavaScript. 10 , JavaScript , , . 11 , JavaScript . 12 Java JavaScript Java , JavaScript , Java , Java . , Java.

II JavaScript . JavaScript: 13 JavaScript JavaScript . Java Script .

16

14 JavaScript Window , . 15 Document , JavaScript , . . 16 CSS DHTML Java Script CSS . , Java Script , HTML , , DHTML. 17 , , . 18 , HTML . 15, , . , : 19 Cookies . , HTTP cookies Inter net Explorer Flash . 20 HTTP , HTTP JavaScript , XMLHttpRequest . , Ajax. 21 JavaScript XML , JavaScript , , , XML , . 22 JavaScript, . , SVG (Scalable Vector Graphics ) VML (Vector Markup Language ), Flash Java . 23 Java Flash , JavaScript Java Flash . , , JavaScript Java Flash . JavaScript. , .

17

: . , , FTP , , . JavaScript, HTML , . , . , . , , OfficinaSansC.

. . , . , , . OReilly. . . , . , ISBN. : JavaScript: The Definitive Guide, by David Fla nagan. Copyright 2006 OReilly Media, Inc., 978 0 596 10199 2. [email protected].

, , :

18OReilly Media 1005 Gravenstein Highway North Sebastopol, CA 95472 (800) 998 9938 ( ) (707) 829 0515 () (707) 829 0104 ()

, : http://www.oreilly.com/catalog/jscript5 , , , : http://www.davidflanagan.com/javascript5 : [email protected] , , OReilly : http://www.oreilly.com

Safari Enabled Safari En abled, , OReilly Net work Safari Bookshelf. Safari , . , , , , . http://safari.oreilly.com.

(Brendan Eich) Mozilla JavaScript. JavaScript JavaScript , , . , . , . c (Aristotle Pagatzis) (http://plasmasturm.org) , , . . (Douglas Crockford) (http://www.crockford.com) . (Norris Boyd), Rhino JavaScript, ,

19

JavaScript Java . (Peter Paul Koch) (http://www.quirksmode.org), (Christian Heilmann) (http://www.wait till i.com) (Ken Cooper) , Ajax. (Todd Ditchendorf) (http:// www.ditchnet.org) (Geoff Stearns) (http://blog.deconcept.com) , . , , Flash ActionScript. , (Sanders Kleinfeld) , . . , . , , . . (Waldermar Horwat) Netscape JavaScript 1.5. W3C DOM (Philippe Le Hegaret) W3C, (Peter Paul Koch), (Dylan Schiemann) (Jeff Yates). (Joseph Kesselman) IBM Research , , W3C DOM. , (Vidur Apparao) Netscape, (Herman Venter) Microsoft, JavaScript (Jay Hodges) (Angelo Sirigos). (Dan Shafer) CNET Builder.com . , . (Norris Boyd) (Scott Furman) Netscape, (Scott Issacs) Microsoft , DOM. , (Dr. Tankred Hirsch mann) JavaScript 1.2. (Nick Thompson) (Richard Yaker) Netscape, (Dr. Shon Katzenberger), (Larry Sullivan) . (Dave C. Mitchell) Microsoft, (Lynn Rollins) R&B Communications. (Neil Berkman) Bay Networks, (Andrew Schulman) (Terry Allen) OReilly & Associates. , . (Deb Cameron) , . (Paula Ferguson) . (Frank Willison) , . , . http://www.davidflanagan.com 2006

JavaScriptJavaScript . Java Script C, C++ Java , if, while &&. . JavaScript , . . . JavaScript . Perl, C C++ Java. JavaScript , Self, C++ Java. Perl, JavaScript , , , Perl. JavaScript , , . , . JavaScript , , , . JavaScript , HTML . , JavaScript, , , . JavaScript , . JavaScript , , , . JavaScript , JavaScript.

1.1. JavaScript

21

JavaScript , . , JavaScript .

1.1. JavaScript JavaScript . JavaScript, , .

1.1.1. JavaScript Java JavaScript , Java, , Sun Microsystems. , . ( LiveScript JavaScript ). JavaScript Java ( . 12 23).

1.1.2. JavaScript JavaScript , , , , , . , JavaScript , . JavaScript , . JavaScript , , , , . , JavaScript , , . JavaScript, . JavaScript, , .

1.2. JavaScript , JavaScript . , .

22

1. JavaScript

(European Computer Manufacturers Association, ECMA).1 JavaScript 1.5 Netscape Mozilla Foundation, Jscript 5.5 Microsoft. , Netscape 4.5 Internet Explorer 4, . , . , ECMA 262 ECMAScript. , . JavaScript , Net scape Mozilla Foundation. JavaScript. JavaScript . Firefox 1.5, Mozilla Foundation, JavaScript 1.6. () , 7.7.10, E4X, . ECMA 262, JavaScript, ECMA , JavaScript, ECMA 357. JavaScript, E4X, ECMAScript for XML. XML , XML . E4X JavaScript 1.6 Firefox 1.5. E4X, 21 . ECMA 262, JavaScript 2.0. , . JavaScript 2.0. , , Microsoft JScript.NET, ActionScript 2.0 ActionScript 3.0, Adobe ( Macromedia) Flash. , Java Script 2.0, JavaScript 1.6 . , , . JavaScript 2.0 , , .1

ECMA 262, 3 ( http://www.ecma internatio nal.org/publications/files/ecma st/ECMA 262.pdf).

1.3. JavaScript

23

1.3. JavaScript JavaScript , JavaScript. , , JavaScript, , JavaScript, JavaScript. JavaScript JavaScript, JavaScript. JavaScript JavaScript (Document Object Model, DOM), . JavaScript , DOM . , , JavaScript . JavaScript , DHTML ( 16), , Ajax ( 20). 13 JavaScript. ECMA 262 Java Script, World Wide Web Consortium (W3C) DOM, , . ( 15, 16 17 .) W3C DOM Microsoft Internet Explorer; .

1.3.1. JavaScript , JavaScript, JavaScript . 1.1 JavaScript, , . 1.1. JavaScript var fact = 1; for(i = 1; i < 10; i++) { fact = fact*i; document.write(i + "! = " + fact + "
"); }

, JavaScript, , . 1.1.

24

1. JavaScript

. 1.1. , JavaScript

, JavaScript HTML . 13. , , document.write().1 HTML HTML . JavaScript HTML , . , JavaScript : . JavaScript , , . 1.2 HTML , , . 1.2. HTML JavaScript

. 1.2 . onclick 1.2 JavaScript , , . on click alert(). . 1.2, alert() . 1.1 1.2 JavaScript. , 1

, .

1.3. JavaScript

25

. 1.2. JavaScript

HTML . 1.3 JavaScript . , . , HTML , , . . 1.3 HTML . , HTML . . Java Script : , , JavaScript , , . HTML , HTML . ,

. 1.3. JavaScript

26

1. JavaScript

onchange onclick . , , . Java Script calculate(). , calculate(). calculate() . , , , , , id. 1.3 , . JavaScript , HTML , CSS JavaScript , , JavaScript.1 1.3. JavaScript JavaScript /* : */ .result { font weight: bold; } /* class="result"*/ #payment { text decoration: underline; } /* id="payment" */ : 1

, HTML , CSS JavaScript , , , , . , , , . , 13.1.5 13.

1.3. JavaScript1) ( ): 2) : 3) : : 4) : $ 5) : $ 6) : $ /* * JavaScript , . * : calculate(), * . * , , , * . */ function calculate( ) { // . , // . // . // . var principal = document.loandata.principal.value; var interest = document.loandata.interest.value / 100 / 12; var payments = document.loandata.years.value * 12; // . var x = Math.pow(1 + interest, payments); var monthly = (principal*x*interest)/(x 1); // . var payment = document.getElementById("payment"); var total = document.getElementById("total");

27

28

1. JavaScriptvar totalinterest = document.getElementById("totalinterest"); // , . // , . if (isFinite(monthly)) { payment.innerHTML = monthly.toFixed(2); total.innerHTML = (monthly * payments).toFixed(2); totalinterest.innerHTML = ((monthly*payments) principal).toFixed(2); } // , , // , . else { payment.innerHTML = ""; total.innerHTML = ""; totalinterest.innerHTML = ""; } }

1.4. JavaScriptJavaScript , . JavaScript . Netscape JavaScript, JavaScript . Internet Ex plorer Microsoft JScript IIS Windows Scripting Host. Adobe JavaScript Flash . Sun JavaScript Java 6.0, Java ( , , 12). Netscape, Microsoft JavaScript , . , Netscape, Mozilla (http://www.mozilla.org/js/). Mozilla JavaScript 1.5: C SpiderMonkey, Java , , Rhino (). , JavaScript, , , . , , , .

1.5. JavaScript

29

1.5. JavaScript . Java Script . , . JavaScript . JavaScript , , , . JavaScript, . , , 1.1 : document.write(" "); for (i=0, j=1, k=0, fib =0; i "+result+"\n"; else expression = ""; // : message += " , :"; // , // . expression = prompt(message, expression); // // // if ( ), . (!expression) return;

// // . // . result = inspector(expression); } }

: inspect() 8.7 Window.prompt() ( ). , :function factorial(n) { // var inspector = function($) { return eval($); } inspect(inspector, " factorial()"); var result = 1; while(n > 1) { result = result * n; n ; inspect(inspector, "factorial( ) loop"); } inspect(inspector, " factorial()"); return result; }

8.8.4.2. Internet Explorer Microsoft Internet Explorer ActiveX DOM

8.9. Function()

163

. , , . , , JavaScript , (, ), , , JavaScript . . , , , , . , . . : http://msdn.microsoft.com/library/en us/ IETechCol/dnwebgen/ie_leak_patterns.asp.

8.9. Function() , function , . Function(). Function() , , . :var f = new Function("x", "y", "return x*y;");

, , :function f(x, y) { return x*y; }

Function() . . Java Script , . , . , . : Function() , . , Function(), . , Function(), : Function() . eval() ( ).

164

8.

Function() . , . , , , , . (, , , , .) : Function(), , , , :var y = ""; function constructFunction() { var y = ""; return new Function("return y"); // ! } // "", , // Function(), . // , // "". alert(constructFunction()()); // ""

, JavaScript 7, , . . , Complex, , Complex . JavaScript , , Java, C++ C#.1 JavaScript , . JavaScript. , , JavaScript 2.0 .

9.1. 7 {}, :new Object()

, :1

JavaScript 2.0.

166var array = new Array(10); var today = new Date( );

9. ,

new . , , this. , new, , . , , . , , , this. , :// . // , "this". function Rectangle(w, h) { this.width = w; this.height = h; } // Rectangle. // , . var rect1 = new Rectangle(2, 4); // rect1 = { width:2, height:4 }; var rect2 = new Rectangle(8.5, 11); // rect2 = { width:8.5, height:11 };

, , this. , , Rectangle(), width height. , , Rectangle. , , , . , new Rectangle(1, 2), , , new init_rect(1, 2). , , this. , new. , this, .

9.2. 8 , , . , , , this. , , Rectangle. :function computeAreaOfRectangle(r) { return r.width * r.height; }

9.2.

167

, . , , . :// Rectangle var r = new Rectangle(8.5, 11); // r.area = function() { return this.width * this.height; } // , var a = r.area();

, . , area . Rectangle():function Rectangle(w, h) { this.width = w; this.height = h; this.area = function( ) { return this.width * this.height; } }

:// U.S. Letter var r = new Rectangle(8.5, 11); var a = r.area();

, . . width height , area Rectangle (, , , , , ). , , . . , JavaScript , . , . , , JavaScript . , new . . new . prototype . prototype, . . constructor ,

168

9. ,

. ( constructor 7, , constructor.) , , , . . Rectangle():// , // . function Rectangle(w, h) { this.width = w; this.height = h; } // , // . Rectangle.prototype.area = function() { return this.width * this.height; }

, width height, . , , , , . , . , . ; , . . , , , . . . , , . ( ). . for/in in. Object.hasOwnProperty():var r = new Rectangle(2, 3); r.hasOwnProperty("width"); // true: width "r" r.hasOwnProperty("area"); // false: area "r" "area" in r; // true: area "r"

9.2.1. , , . , JavaScript . p o, JavaScript , o p. , , p . .

9.2.

169

, JavaScript . , , : , o.p, o p. , JavaScript p o . p , , . , . p o, , p. , o p, p . p, JavaScript o. p, o, , JavaScript p. , p () p . , . 9.1.

. 9.1.

170

9. ,

, , , , . . ( ) . , . , , , .

9.2.2. , , . , String Date, , . , , String:// true, c String.prototype.endsWith = function(c) { return (c == this.charAt(this.length 1)) }

endsWith() String, :var message = "hello world"; message.endsWith('h') // false message.endsWith('d') // true

: , , Java Script . , , , , . JavaScript , , . : Object.pro totype. for/in, Object.prototype, JavaScript . {}, , . Object.prototype , , , , . , , JavaScript. JavaScript , Java , , ,

9.2.

171

. , , , . , , JavaScript, . , Function.apply() Microsoft Internet Exp lorer 4 5 . , , :// Function.apply() , // , (Aaron Boodman). if (!Function.prototype.apply) { // // . eval() Function.prototype.apply = function(object, parameters) { var f = this; // var o = object || window; // , var args = parameters || []; // // o. // , o._$_apply_$_ = f; // eval(). // . // . var stringArgs = []; for(var i = 0; i < args.length; i++) stringArgs[i] = "args[" + i + "]"; // , // . var arglist = stringArgs.join(","); // var methodcall = "o._$_apply_$_(" + arglist + ");"; // eval() var result = eval(methodcall); // delete o._$_apply_$_; // return result; }; }

, Firefox 1.5 (. 7.7.10). Ar ray.map() , , :// Array.map() f // , . // map() , f

172// // // if

9. , . f() 3 . , , . . (!Array.prototype.map) { Array.prototype.map = function(f, thisObject) { var results = []; for(var len = this.length, i = 0; i < len; i++) { results.push(f.call(thisObject, this[i], i, this)); } return results; }

}

9.3. JavaScript JavaScript , , . , C++ Java. . JavaScript . , , JavaScript . JavaScript . ( ) , . JavaScript , , , Java C++. . JavaScript , Java C++.1 , . , , , , . , , , , . JavaScript , . , Java C++, . 2, . JavaScript1

2

, . Java C++ , , JavaScript.

9.3. JavaScript

173

, , , , . Java C++ . , , . . JavaScript , , , . JavaScript, , , . , . , . (. . ) . Java , . . Java Script. , Rectangle , rect. Java : , , . , JavaScript .

9.3.1. . , 10 , 10 . , Rectangle Rectang le width, . width . , . , , r , Rectangle, :r.width

JavaScript . , , JavaScript , / .

9.3.2. , , , . ( Java , JavaScript, Java .)

174

9. ,

, . area() Rectangle . Rectangle :a = r.area( );

, , , this. , , , . . Java Script . , , , .

9.3.2.1. this , Java C++, JavaScript. Java C++ this. , , area Java :return width * height;

JavaScript this :return this.width * this.height;

this , with ( 6.18), :Rectangle.prototype.area = function( ) { with(this) { return width*height; } }

9.3.3. Java , , . , , . , , . Number.MAX_VALUE JavaScript, , MAX_VALUE Number. , . , , JavaScript, . , JavaScript

9.3. JavaScript

175

. , Rectangle.UNIT 1x1 :Rectangle.UNIT = new Rectangle(1,1);

Rectangle , JavaScript , , .

9.3.4. , , ; , . Date.parse() ( ) . Date, Date. , this , this . ( this .) , . , , , , . , Java Script . JavaScript, .

9.3.5. : Circle 9.1 , , . , , . 9.1. Circle// . function Circle(radius) { // r , // . this.r = radius; } // Circle.PI , . . . Circle.PI = 3.14159; // , . Circle.prototype.area = function( ) { return Circle.PI * this.r * this.r; } // Circle . Circle.max = function(a,b) {

176if (a.r > b.r) return a; else return b; } // var c = new Circle(1.0); // c.r = 2.2; // var a = c.area(); // var x = Math.exp(Circle.PI); // var d = new Circle(1.2); // var bigger = Circle.max(c,d); //

9. ,

: Circle r area() PI Circle max()

9.3.6. : 9.2 Java Script, , . . 9.2. /* * Complex.js: * Complex . * , * , i 1. */ /* * * . * . " ", * . */ function Complex(real, imaginary) { this.x = real; // this.y = imaginary; // } /* * * ( ) . * , , * . , * this. * . */ // . // (0,0). Complex.prototype.magnitude = function() { return Math.sqrt(this.x*this.x + this.y*this.y); }; // . Complex.prototype.negative = function() {

9.3. JavaScriptreturn new Complex( this.x, this.y); }; // // . Complex.prototype.add = function(that) { return new Complex(this.x + that.x, this.y + that.y); } // // . Complex.prototype.multiply = function(that) { return new Complex(this.x * that.x this.y * that.y, this.x * that.y + this.y * that.x); } // Complex . // , Complex . Complex.prototype.toString = function() { return "{" + this.x + "," + this.y + "}"; }; // . Complex.prototype.equals = function(that) { return this.x == that.x && this.y == that.y; } // . // , Complex // . Complex.prototype.valueOf = function() { return this.x; } /* * , * * ( * ). , * this, . */ // . Complex.add = function (a, b) { return new Complex(a.x + b.x, a.y + b.y); }; // . Complex.multiply = function(a, b) { return new Complex(a.x * b.x a.y * b.y, a.x * b.y + a.y * b.x); };

177

// . // , "". // ( JavaScript , .) Complex.ZERO = new Complex(0,0); Complex.ONE = new Complex(1,0); Complex.I = new Complex(0,1);

178

9. ,

9.3.7. , C++, (private) , . , , /. JavaScript ( 8.8), , . , . Rectangle, :function ImmutableRectangle(w, h) { // , // . // // . this.getWidth = function() { return w; } this.getHeight = function() { return h; } } // : . ImmutableRectangle.prototype.area = function( ) { return this.getWidth( ) * this.getHeight( ); };

(, , ), , (Douglas Crockford). http://www.crockford.com/ javascript/private.html.

9.4. Object JavaScript , . .

9.4.1. toString() toString() , toString() . , toString(), . , . . . , . ,

9.4. Object

179

parse() , toString(), . Complex 9.2 toString(), toString() Circle:Circle.prototype.toString = function () { return "[ " + this.r + " (" + this.x + ", " + this.y + ").]"; }

toString() Circle :" 1 (0, 0)."

9.4.2. valueOf() valueOf() toString(), , Java Script , . , , , this. , . valueOf(), Object, , , . , Number Boolean, , valueOf() , . Number Boolean , . , . valueOf(). 9.2, , valueOf() Complex. . Complex , . , , :var var var var a b c d = = = = new Complex(5,4); new Complex(2,1); Complex.sum(a,b); // c {7,5} a + b; // d 7

valueOf() : valueOf() toString(). , valueOf() , , , toString(). Complex:alert("c = " + c); // valueOf(); "c = 7" alert("c = " + c.toString()); // "c = {7,5}"

180

9. ,

9.4.3. JavaScript , . , , , , , .1 (, < >). , , . Java , JavaScript. , equals(). true, , . , , . , , . Complex 9.2 equals(). , . , , . , Complex , magnitude(). Circle X Y? , ? JavaScript , < = b a == b a != b a.compareTo(b) < 0 a.compareTo(b) 0 a.compareTo(b) >= 0 a.compareTo(b) == 0 a.compareTo(b) != 0

compareTo() Complex 9.2, :Complex.prototype.compareTo = function(that) { // // magnitude(), . // 1 1, // , // , . if (!that || !that.magnitude || typeof that.magnitude != "function") throw new Error(" Complex.compareTo()"); // , // , . // compareTo(). return this.magnitude() that.magnitude(); }

, , . Array.sort() , , compareTo(). compareTo() :complexNumbers.sort(new function(a,b) { return a.compareTo(b); });

, compare() , compareTo(). , , :Complex.compare = function(a,b) { return a.compareTo(b); };

182

9. ,

:complexNumbers.sort(Complex.compare);

: compare() compareTo() Complex 9.2. , equals(), . equals() , Complex , . compareTo() , . 1+0i 0+1i compareTo(), equals() , . , equals() compa reTo() , . . compareTo(), equals():1// // . , Complex.prototype.compareTo = function(that) { var result = this.x that.x; // // if (result == 0) // ... result = this.y that.y; // // , // , return result; };

9.5. Java, C++ . , . , . . , . , JavaScript . JavaScript . JavaScript Object , , . , Object . Object. , . Object? , ; 1

< >. . . .

9.5.

183

Object(). , Ob ject.prototype! Complex Com plex.prototype, Object.prototype. Complex, . , Complex.prototype. , , Object.prototype. : Complex , Object, Complex.prototype Object.prototype. , , 9.2, Complex.prototype toString(). Object.prototype , Complex , toString() Complex.proto type . , , Object. Java Script; . , . , Rectangle, , . , Rectangle Rectang le.prototype. 9.3 Rectanle PositionedRectangle. 9.3. JavaScript// . // function Rectangle(w, h) { this.width = w; this.height = h; } Rectangle.prototype.area = function( ) { return this.width * this.height; } // function PositionedRectangle(x, y, w, h) { // // width height . // call, // . // . Rectangle.call(this, w, h); // this.x = x; this.y = y; } // , // PositionedRectangle(), // Object.

184

9. ,

// Rectangle, . PositionedRectangle.prototype = new Rectangle(); // , // width height, // Rectangle, . delete PositionedRectangle.prototype.width; delete PositionedRectangle.prototype.height; // // Rectangle(), constructor // . , PositionedRectangle // , // constructor PositionedRectangle.prototype.constructor = PositionedRectangle; // // , . PositionedRectangle.prototype.contains = function(x,y) { return (x > this.x && x < this.x + this.width && y > this.y && y < this.y + this.height); }

9.3, JavaScript , Object. , . . , constructor .1 , , , . PositionedRectangle, :var r = new PositionedRectangle(2,2,2,2); print(r.contains(3,3)); // print(r.area( )); // // : print(r.x + ", " + r.y + ", " + r.width + ", " + r.height); // 3 1

Rhino 1.6r1 ( JavaScript, Java) , constructor . Rhino , constructor, . PositionedRectangle constructor, Rectangle(). , instanceof Positi onedRectangle Rectangle.

9.5. print(r instanceof PositionedRectangle && r instanceof Rectangle && r instanceof Object);

185

9.5.1. Positioned Rectangle() . . , superclass :// . PositionedRectangle.prototype.superclass = Rectangle;

, . , , , superclass, this.superclass (), (). , , , 9.3. , :function PositionedRectangle(x, y, w, h) { this.superclass(w,h); this.x = x; this.y = y; }

: this. , call() apply() .

9.5.2. , , , (overrides) . , , . , toString() toString() Object. , , . . . , . . , Rectangle toString() ( ) :

186

9. ,

Rectangle.prototype.toString = function( ) { return "[" + this.width + "," + this.height + "]"; }

toString() Rectangle, PositionedRectangle, , , . PositionedRectangle , toString() . , width height . :PositionedRectangle.prototype.toString = function() { return "(" + this.x + "," + this.y + ") " + // Rectangle.prototype.toString.apply(this); // }

toString() . : apply(), , . PositionedRectangle.prototype superclass, , :PositionedRectangle.prototype.toString = function( ) { return "(" + this.x + "," + this.y + ") " + // this.superclass.prototype.toString.apply(this); }

, superclass . , .

9.6. , . JavaScript , . JavaScript , ( ) . 9.4 , . 9.4. // . // . // , Object, Array, Date RegExp // . function borrowMethods(borrowFrom, addTo) { var from = borrowFrom.prototype; //

9.6. var to = addTo.prototype; //

187

for(m in from) { // if (typeof from[m] != "function") continue; // , // to[m] = from[m]; // } }

, , . . 9.5 , , , . , , , . 9.5. , // . // toString(), . function GenericToString() {} GenericToString.prototype.toString = function( ) { var props = []; for(var name in this) { if (!this.hasOwnProperty(name)) continue; var value = this[name]; var s = name + ":" switch(typeof value) { case 'function': s += "function"; break; case 'object': if (value instanceof Array) s += "array" else s += value.toString( ); break; default: s += String(value); break; } props.push(s); } return "{" + props.join(", ") + "}"; } // equals(), . function GenericEquals() {} GenericEquals.prototype.equals = function(that) { if (this == that) return true; // // // // , this , that, : . === . ,

188

9. , // , , // , , equals() true var propsInThat = 0; for(var name in that) { propsInThat++; if (this[name] !== that[name]) return false; } // , this var propsInThis = 0; for(name in this) propsInThis++; // this , // , if (propsInThis != propsInThat) return false; // . return true;

}

Rectangle, toString() equals(), :// Rectangle function Rectangle(x, y, w, h) { this.x = x; this.y = y; this.width = w; this.height = h; } Rectangle.prototype.area = function( ) { return this.width * this.height; } // borrowMethods(GenericEquals, Rectangle); borrowMethods(GenericToString, Rectangle);

, , . ColoredRec tangle. Rectangle Colored:// , . , // , . function Colored(c) { this.color = c; } Colored.prototype.getColor = function() { return this.color; } // function ColoredRectangle(x, y, w, h, c) { this.superclass(x, y, w, h); // Colored.call(this, c); // Colored } // Rectangle ColoredRectangle.prototype = new Rectangle(); ColoredRectangle.prototype.constructor = ColoredRectangle; ColoredRectangle.prototype.superclass = Rectangle;

9.7. // Colored borrowMethods(Colored, ColoredRectangle);

189

ColoredRectangle Rectangle ( ), Colored. Rectangle Object GenericEquals GenericToString. , . ColoredRectangle Colored, ColoredRectangle Colored. instanceof , 9.7.3 , , .

9.7. JavaScript , JavaScript . JavaScript , . , typeof ( . 5.10.2). typeof , . , typeof null "ob ject", typeof undefined "undefined". "object", , "function", .

9.7.1. instanceof , , , instanceof, . , x , true:x instanceof Array

instanceof , , . : . , o o instanceof Object true. , instanceof , , true:typeof f == "function" f instanceof Function f instanceof Object

, , constructor. :var d = new Date(); // Date; Date Object

190

9. ,

var isobject = d instanceof Object; // true var realobject = d.constructor==Object; // false

9.7.2. Object.toString() instanceof constructor , , , , , . Object.toString(). 7, Object toString() . , , . toString() , . ECMAScript , toString() :[object class]

class , . , class "Array", "Function", / "Date". Math "Math", Error "Error". JavaScript , JavaScript, class , (, "Window", "Document" "Form"). , , Circle Complex, , class "Object". toString() . toString() , , , . Ob ject.prototype apply() , :Object.prototype.toString.apply(o); // toString()

9.6 , . , toString() , classname , . 9.6. function getType(x) { // x null, "null" if (x == null) return "null"; // typeof var t = typeof x;

9.7. // , if (t != "object") return t; // , x . toString() // . var c = Object.prototype.toString.apply(x); // "[object class]" c = c.substring(8, c.length 1); // "[object" "]" // Object, . if (c != "Object") return c; // "Object", , x // . if (x.constructor == Object) return c; // "Object"

191

// // classname, if ("classname" in x.constructor.prototype && // typeof x.constructor.prototype.classname == "string") // return x.constructor.prototype.classname; // , . return ""; }

9.7.3. : , , !. JavaScript , : , , . , JavaScript, : X, X, X().1 , . Rectangle, equals() GenericEquals. Rectangle GenericEquals. instanceof , ( 9.7). 9.7. // true, c.prototype // o. o , , // o . // : , // , . , // , false. function borrows(o, c) {1

Ruby. .

192

9. , // o c, true if (o instanceof c) return true; // // // // // // if , . , , undefined, " ". undefined false, false, . (c == Array || c == Boolean || c == Date || c == Error || c == Function || c == Number || c == RegExp || c == String) return undefined;

if (typeof o == "function") o = o.prototype; var proto = c.prototype; for(var p in proto) { // , if (typeof proto[p] != "function") continue; if (o[p] != proto[p]) return false; } return true; }

borrows() 9.7 : true, o , c. : o c, , c. JavaScript () . 9.8 , . 9.8. // true, o // , c.prototype. // false. , // , . function provides(o, c) { // o c, "" c if (o instanceof c) return true; // , if (typeof o == "function") o = o.prototype; // // // if , undefined. . (c == Array || c == Boolean || c == Date || c == Error || c == Function || c == Number || c == RegExp || c == String) return undefined;

var proto = c.prototype; for(var p in proto) { // c.prototype // , if (typeof proto[p] != "function") continue; // o , false if (!(p in o)) return false;

9.7. // if // if , , false (typeof o[p] != "function") return false; , false. (o[p].length != proto[p].length) return false;

193

} // , true. return true; }

provide() compareTo(), 9.4.3. , compareTo() , , compareTo(). Comparable:function Comparable( ) {} Comparable.prototype.compareTo = function(that) { throw "Comparable.compareTo() . !"; }

Comparable : , . , :// , o p // compareTo() if (o.constructor == p.constructor && provides(o, Comparable)) { var order = o.compareTo(p); }

: , , borrows() provides(), undefined, JavaScript, Array. , for/in. undefined, , , true. Array . , 7.8 ( ), , , . , , . 9.9. 9.9. , function isArrayLike(x) { if (x instanceof Array) return true; // if (!("length" in x)) return false; // length if (typeof x.length != "number") return false; // length , if (x.length < 0) return false; // if (x.length > 0) { // , length 1

194

9. , if (!((x.length 1) in x)) return false; } return true;

}

9.8. : defineClass() define Class(), , , , . 9.10. 9.10. /** * defineClass() JavaScript . * * . * JavaScript , * , . * , : * , . * * , , * : * * name: . * , classname . * * extend: . * Object(). * superclass . * * construct: . * . , * constructor . * * methods: , ( , * ) . * . * . * "classname", "superclass" "constructor" * . * * statics: , ( * ) . * . . * * borrows: . * * , * .

9.8. : defineClass()

195

* , * , , * , . * : * , * . * , , * . * . * * provides: . * , * , * , . * , , * "" , * . , * . * ( ) * . , * . **/ function defineClass(data) { // . // . var classname = data.name; var superclass = data.extend || Object; var constructor = data.construct || function( ) {}; var methods = data.methods || {}; var statics = data.statics || {}; var borrows; var provides; // , // . if (!data.borrows) borrows = []; else if (data.borrows instanceof Array) borrows = data.borrows; else borrows = [ data.borrows ]; // . if (!data.provides) provides = []; else if (data.provides instanceof Array) provides = data.provides; else provides = [ data.provides ]; // , . var proto = new superclass(); // . for(var p in proto) if (proto.hasOwnProperty(p)) delete proto[p]; // , . for(var i = 0; i < borrows.length; i++) { var c = data.borrows[i]; borrows[i] = c; // c

196

9. , for(var p in c.prototype) { if (typeof c.prototype[p] != "function") continue; proto[p] = c.prototype[p]; } } // // , for(var p in methods) proto[p] = methods[p]; // "constructor", // "superclass" "classname" proto.constructor = constructor; proto.superclass = superclass; // classname , . if (classname) proto.classname = classname; // , . for(var i = 0; i < provides.length; i++) { // var c = provides[i]; for(var p in c.prototype) { // if (typeof c.prototype[p] != "function") continue; // if (p == "constructor" || p == "superclass") continue; // // . , if (p in proto && typeof proto[p] == "function" && proto[p].length == c.prototype[p].length) continue; // throw new Error(" " + classname + " "+ c.classname + "." + p); } } // constructor.prototype = proto; // for(var p in statics) constructor[p] = data.statics[p]; // return constructor;

}

9.11 , defineClass(). 9.11. defineClass()// Comparable , // , "" Comparable. var Comparable = defineClass({ name: "Comparable", methods: { compareTo: function(that) { throw "abstract"; } } }); // equals() var GenericEquals = defineClass({

9.8. : defineClass()name: "GenericEquals", methods: { equals: function(that) { if (this == that) return true; var propsInThat = 0; for(var name in that) { propsInThat++; if (this[name] !== that[name]) return false; } // , this var propsInThis = 0; for(name in this) propsInThis++; // , if (propsInThis != propsInThat) return false; // , . return true; } } }); // Rectangle, Comparable var Rectangle = defineClass({ name: "Rectangle", construct: function(w,h) { this.width = w; this.height = h; }, methods: { area: function() { return this.width * this.height; }, compareTo: function(that) { return this.area( ) that.area( ); } }, provides: Comparable }); // Rectangle, // , , // equals(). var PositionedRectangle = defineClass({ name: "PositionedRectangle", extend: Rectangle, construct: function(x,y,w,h) { this.superclass(w,h); // this.x = x; this.y = y; }, methods: { isInside: function(x,y) { return x > this.x && x < this.x+this.width && y > this.y && y < this.y+this.height; } }, statics: { comparator: function(a,b) { return a.compareTo(b); } }, borrows: [GenericEquals] });

197

JavaScript , . JavaS cript . Java Script , JavaScript .1 , JavaScript. JavaScript (JavaScript Archive Network, JSAN) Perl (Compre hensive Perl Archive Network, CPAN), , JavaScript , CPAN Perl. JSAN http://www.openjsan.org. JavaScript , , JavaScript , . . , , 1

JavaScript . , JavaScript. JavaScript (. 13). load(), .

10.1.

199

: , . . JavaScript, , , , . . , .

10.1. JavaScript , , , . , , , , . . JavaScript 1, JavaScript . provides() defineClass(), 9.8 9.10 . . JavaScript , . , :// , // var Class = {}; // Class.define = function(data) { /* */ } Class.provides = function(o, c) { /* */ }

: ( ) JavaScript . , . JavaScript : . : , .1

, , namespace C++ Tcl ( JavaScript ). . . .

200

10.

, , .

, Class, Class.js, , :/** * Class.js: . * * "Class". * Class , * . **/

JavaScript , . , , Class ? . , . . Class.js, . , utilities/Class.js flanagan/Class.js. , . , Class, , flanagan.Class. :/** * flanagan/Class.js: . * * "flanagan", * . , * Class flanagan. * flanagan.Class. **/ var flanagan; // "flanagan" if (!flanagan) flanagan = {}; // , flanagan.Class = {} // flanagan.Class // flanagan.Class.define = function(data) { /* */ }; flanagan.Class.provides = function(o, c) { /* */ };

flanagan . , , , flanagan.Date. , flanagan var . , , , unde

10.1.

201

fined. . , undefined. . , Flanagan, , , , . , Java, , . , (.com ) , JavaScript . davidflanagan.com, com/davidflanagan/Class.js com.davidflanagan.Class. JavaScript , com.davidflanagan, davidflanagan.com. JavaScript , . . , : , . 10.1 com.david flanagan.Class. , ; , com.davidflanagan.Class com com.davidflanagan, . , . 10.1. // "com", // , , var com; if (!com) com = {}; else if (typeof com != "object") throw new Error(" com , "); // if (!com.davidflanagan) com.davidflanagan = {} else if (typeof com.davidflanagan != "object") throw new Error("com.davidflanagan , "); // , com.davidflanagan.Class if (com.davidflanagan.Class) throw new Error("com.davidflanagan.Class "); // //

202

10.

com.davidflanagan.Class = { define: function(data) { /* */ }, provides: function(o, c) { /* */ } };

10.1.1. , , , , . , . , com . , :var com; // if (!com || !com.davidflanagan || !com.davidflanagan.Class) throw new Error("com/davidflanagan/Class.js ");

, VERSION , , . , .

10.1.2. Class, 10.1, . . , JavaScript . 10.2 , , . Class define(). ( , , 9.10.) 10.2. /** * com/davidflanagan/Complex.js: , * * com.davidflanagan.Complex() * com/davidflanagan/Class.js **/ // Class var com; // if (!com || !com.davidflanagan || !com.davidflanagan.Class) throw new Error("com/davidflanagan/Class.js "); // , // com.davidflanagan , . // Complex com.davidflanagan.Complex = com.davidflanagan.Class.define({ name: "Complex", construct: function(x,y) { this.x = x; this.y = y; },

10.1. methods: { add: function(c) { return new com.davidflanagan.Complex(this.x + c.x, this.y + c.y); } }, });

203

, . 10.3 , , . 10.3. , /** * com/davidflanagan/Shapes.js: , * * com.davidflanagan.shapes * com/davidflanagan/Class.js **/ // Class var com; // if (!com || !com.davidflanagan || !com.davidflanagan.Class) throw new Error("com/davidflanagan/Class.js "); // var define = com.davidflanagan.Class.define; // // // if , com.davidflanagan , . (com.davidflanagan.shapes) throw new Error(" com.davidflanagan.shapes ");

// com.davidflanagan.shapes = {}; // , // com.davidflanagan.shapes.Circle = define ({ /* */ }); com.davidflanagan.shapes.Rectangle = define({ /* */ }); com.davidflanagan.shapes.Triangle = define ({ /* */});

10.1.3. ( ). , , , . , . , , , . , , .

204

10.

, , :(function() { // . // // // , // . })( ); // .

. . JavaScript : HTML , . , . , , HTML JavaScript , , . ( Java Script 13.1.5), , HTML JavaScript . , , . 10.5 , . onload, . ( 17.)

10.2. , com.davidflanagan.Class, , com.davidflanagan.Class.define(). , , . JavaScript , . , com.davidflana gan.Class :// . var define = com.davidflanagan.Class.define;

, .

10.2.

205

. , , , . , , . : define . , , . :var defineClass = com.davidflanagan.Class.define;

. , , , defineClass(), define(). , . :// . // , . . , , . var Class = {}; // . Class.define = com.davidflanagan.Class.define;

, . : , , . , , , . , , . , Class.define() , , com.davidflanagan.Class.counter . , :// . // , . Class.counter = com.davidflanagan.Class.counter;

, , :// , com.davidflanagan.Class.counter = 0; // , com.davidflanagan.Class.getCounter = function() { return com.davidflanagan.Class.counter; }

, , .

206

10.

. getCounter(). JavaScript , counter, , getCounter() . , . , , , . ( , 10.2.2.)

10.2.1. , , . , , . JavaScript , , . , . . , . , , . , , . getCounter(), , counter , _counter. , . , JSAN, . , . JSAN JSAN , , , .

10.2.2. 8.8 , , .1 1

. 8, , .

10.2.

207

, . , , . . , , . , . , , . , , . , , . 10.4. , . 10.4. // . // . var com; if (!com) com = {}; if (!com.davidflanagan) com.davidflanagan = {}; com.davidflanagan.Class = {}; // . // , // , . // // com.davidflanagan.Class // : , // . (function( ) { // // function define(data) { counter++; /* */ } function provides(o, c) { /* */ } // , . // var counter = 0; // // , function getCounter( ) { return counter; } // , , // , , // var ns = com.davidflanagan.Class; ns.define = define; ns.provides = provides;

208

10.

ns.getCounter = getCounter; })( ); //

10.3. , . Module.createNamespace() . :// Module.createNamespace("com.davidflanagan.Class"); // com.davidflanagan.Class.define = function(data) { /* */ }; com.davidflanagan.Class.provides = function(o, c) { /* */ };

Module.require() ( ) , . :// Complex , Class Module.require("com.davidflanagan.Class", 1.0);

Module.importSymbols() . :// Module // importSymbols Module.importSymbols(Module); // , // , // Complex importSymbols(com.davidflanagan.Complex); // com.davidflanagan.Class.define() Class var Class = {}; importSymbols(com.davidflanagan.Class, Class, "define");

, Module.registerInitializationFunction() , .1 JavaScript, , . ( ) , Modu le.runInitializationFunctions(). Module 10.5. , . .1

17.6.

10.3.

209

10.5. /** * Module.js: * * , * JSAN. * Module. */ // , var Module; if (Module && (typeof Module != "object" || Module.NAME)) throw new Error(" 'Module' "); // Module = {}; // Module.NAME = "Module"; // Module.VERSION = 0.1; // // , // . // , Module.EXPORT = ["require", "importSymbols"]; // , . // , , // . Module.EXPORT_OK = ["createNamespace", "isDefined", "registerInitializationFunction", "runInitializationFunctions", "modules", "globalNamespace"]; // Module.globalNamespace = this; // // Module.modules = { "Module": Module };// Module [name] >namespace. /** * * * . * * , . * * NAME . * version, VERSION. * * Module.modules */ Module.createNamespace = function(name, version) { // . // // .

210

10. if (!name) throw new Error("Module.createNamespace(): "); if (name.charAt(0) == '.' || name.charAt(name.length 1) == '.' || name.indexOf("..") != 1) throw new Error("Module.createNamespace(): : " + name); // var parts = name.split('.'); // // , . var container = Module.globalNamespace; for(var i = 0; i < parts.length; i++) { var part = parts[i]; // , // . if (!container[part]) container[part] = {}; else if (typeof container[part] != "object") { // , , var n = parts.slice(0,i).join('.'); throw new Error(n + " , "); } container = container[part]; } // , , , . var namespace = container; // // // if , , NAME. (namespace.NAME) throw new Error(" "+name+" ");

// namespace.NAME = name; if (version) namespace.VERSION = version; // Module.modules[name] = namespace; // return namespace; } /** * , . * true, , false . */ Module.isDefined = function(name) { return name in Module.modules; }; /** * , * . * , , * . * , , , .

10.3. */ Module.require = function(name, version) { if (!(name in Module.modules)) { throw new Error(" " + name + " "); } // , if (!version) return; var n = Module.modules[name]; // , , // , . if (!n.VERSION || n.VERSION < version) throw new Error(" " + name + " " + n.VERSION + " " + version + " ."); }; /** * . * , * . * * , * EXPORT . , EXPORT_OK * , from. * * , * * , . * EXPORT EXPORT_OK, * , . */ Module.importSymbols = function(from) { // , . // , if (typeof from == "string") from = Module.modules[from]; if (!from || typeof from != "object") throw new Error("Module.importSymbols(): " + " "); // // , , // . var to = Module.globalNamespace; // var symbols = []; // var firstsymbol = 1; // // , if (arguments.length > 1 && typeof arguments[1] == "object") { if (arguments[1] != null) to = arguments[1]; firstsymbol = 2; } // for(var a = firstsymbol; a < arguments.length; a++)

211

212symbols.push(arguments[a]);

10.

// , , // , . if (symbols.length == 0) { // EXPORT, . if (from.EXPORT) { for(var i = 0; i < from.EXPORT.length; i++) { var s = from.EXPORT[i]; to[s] = from[s]; } return; } // , EXPORT_OK , // else if (!from.EXPORT_OK) { for(s in from) to[s] = from[s]; return; } } // , . // EXPORT / EXPORT_OK, // , , // . , // . var allowed; if (from.EXPORT || from.EXPORT_OK) { allowed = {}; // . // . if (from.EXPORT) for(var i = 0; i < from.EXPORT.length; i++) allowed[from.EXPORT[i]] = true; if (from.EXPORT_OK) for(var i = 0; i < from.EXPORT_OK.length; i++) allowed[from.EXPORT_OK[i]] = true; } // for(var i = 0; i < symbols.length; i++) { var s = symbols[i]; // if (!(s in from)) // throw new Error("Module.importSymbols(): " + s + " "); if (allowed && !(s in allowed)) // , throw new Error("Module.importSymbols(): " + s + " " + " ."); to[s] = from[s]; // } }; // // . Module.registerInitializationFunction = function(f) {

10.3. // Module._initfuncs.push(f); // onload , . Module._registerEventHandler(); }

213

// . // JavaScript . // . Module.runInitializationFunctions = function() { // , , // . for(var i = 0; i < Module._initfuncs.length; i++) { try { Module._initfuncs[i](); } catch(e) { /* */} } // , . . . Module._initfuncs.length = 0; } // , Module._initfuncs = []; // , // onload, // . // . Module._registerEventHandler = function() { var clientside = // "window" in Module.globalNamespace && "navigator" in window; if (clientside) { if (window.addEventListener) { // W3C DOM window.addEventListener("load", Module.runInitializationFunctions, false); } else if (window.attachEvent) { // IE5+ window.attachEvent("onload", Module.runInitializationFunctions); } else { // IE4 , onload, // . window.onload = Module.runInitializationFunctions; } } // , // . Module._registerEventHandler = function() {}; }

, . RegExp JavaScript , String RegExp , .1 JavaScript ECMAScript v3. Java Script 1.2 , ECMAScript v3, JavaScript 1.5. JavaScript Perl. , , JavaScript 1.2 Perl 4, JavaScript 1.5 Perl 5. , . String RegExp, .

11.1. JavaScript RegExp. RegExp RegExp(), . , , , , (/). , JavaScript , :1

. , , , , , ! regexp, RE.

11.1. var pattern = /s$/;

215

RegExp pattern. RegExp , s. ( .) RegExp():var pattern = new RegExp("s$");

RegExp , RegExp() . . JavaScript , Perl, Perl , , JavaScript. . , , , . /java/ , "java". , . , /s$/ . , s, . , $, , . , , s. , JavaScript . , , Perl, OReilly Programming Perl (Larry Wall), (Tom Christiansen) (Jon Orwant).1 OReilly Mastering Regular Expressions (Jeffrey E. F. Friedl).2

11.1.1. , . JavaScript , (\).3 , \n . . 11.1.1

2

3

, , Perl, 3 . . . : , 2002. , 3 . . . : , 2008. . . . .

216

11.

11.1.

\0 \t \n \v \f \r \xnn \uxxxx \cX NUL (\u0000) (\u0009) (\u000A) (\u000B) (\u000C) (\u000D) Latin, nn; , \x0A , \n Unicode , xxxx; , \u0009 , \t

^X; , \cJ \n

:^ $ . * + ? = ! : | \ / ( ) [ ] { }

. , . , , , . 1, @, . , \, . , , , , \. , , , . , , : /\\/.

11.1.2. . , . , /[abc]/ a, b c. 1

. . . .

11.1.

217

, , , . ^ , . /[^abc]/ , a, b c. . /[a z]/, Latin /[a zA Z0 9]/. , JavaScript (escape) . , \s , (whitespaces) Unicode, \S , Unicode. . 11.2 . ( : ASCII Unicode . Unicode , , /[\u0400 \04FF]/ .) 11.2. [...] [^...] . \w \W \s \S \d \D [\b] , , , Unicode ASCII . [a zA Z0 9_] , ASCII . [^a zA Z0 9_] Unicode , Uni code. : \w \S ASCII . [0 9] , ASCII . [^0 9] ( )

: . \s , \d , , /[\s\d]/ . . , \b . , . , , : /[\b]/.

218

11.

11.1.3. , /\d\d/ /\d\d\d\d/, , , , , , . , , . , , , . , . , + . . 11.3 . 11.3. {n,m} {n,} {n} ? + *a

, n, m , n n ; . {0,1} . {1,} .a {0,}

?, * , : . ? * .

:/\d{2,4}/ /\w{3}\d?/ /\s+java\s+/ /[^"]*/ // // // // // // , "java" ,

* ?. , , . , /a*/ "bbbb", a!

11.1.

219

11.1.3.1. , . 11.3, , . , . JavaScript 1.5 ( Perl 5, JavaScript 1.2) , . ( ) : ??, +?, *? {1,5}?. , /a+/ a. "aaa", . /a+?/ a . , a. . /a*b/, a, b. "aaab", . /a*?b/. b, a. "aaab" b. , . , , . , , .

11.1.4. , , . | . , /ab|cd|ef/ ab, cd, ef, /\d{3}|[a z]{4}/ , . : , . , , . ab /a|ab/, . . , |, *, +, ? . , /java(script)?/ java, script, /(ab|cd)+|ef)/ ef, ab cd. .

220

11.

, , , . ( , , .) , , . /[a z]+\d+/. , . (/[a z]+(\d+)/), . , . , . \. . , \1 , \3 . : , . , ([Ss]cript) \2:/([Jj]ava([Ss]cript)?)\sis\s(fun\w*)/

, , . , , . , . , (. . ):/['"][^'"]*['"]/

:/(['"])[^'"]*\1/

\1 . , , . , . , . . :/(['"])[^\1]*\1/

, /. JavaScript 1.5 ( JavaScript 1.2) . ( ) (?: ). , , :/([Jj]ava(?:[Ss]cript)?)\sis\s(fun\w*)/

11.1.

221

(?:[Ss]cript) , ?. , \2 , (fun\w*). . 11.4 , . 11.4. , | (...) . , . . , *, +, ?, | . . , , . . , , . , n. (, ). . , (?:, .

(?:...) \n

11.1.5. , . , \s . , . , \b \w ( ASCII ) \W ( ), ASCII .1 , \b, , , . , . . . , ^ $, . , JavaScript, , /^JavaScript$/. Java ( , JavaScript) /\sJava\s/, 2 . . , Java, , . 1

2

( ), \b . , . . . .

222

11.

, , , , . \s ( ) \b. : /\bJava\b/. \B , . /\B[Ss]cript/ JavaScript postscript script Scripting. JavaScript 1.5 ( JavaScript 1.2) . (?= ), , , , . , JavaScript, , , /[Jj]ava([Ss]cript)?(?=\:)/. JavaScript JavaScript: The Definitive Guide, Ja va Java in a Nutshell, . . . (?!, , , . , /Java(?!Script)([A Z]\w*)/ Java, ASCII , Java Script. JavaBeans, Javanese, JavaScrip, JavaScript JavaScripter. . 11.5 . 11.5. ^ $ \b . . , . . \w \W \w . ( , [\b] .) , . . , p, . . , p.

\B (?=p)

(?!p)

11.1.6. , . .

11.2. String

223

, , . JavaScript 1.2 . i , , g , . . . . , java ( Java, JAVA . .), /\bjava\b/i. , g: /\bjava\b/gi. JavaScript 1.5 m, . , , , ^ $, , , . , /Java$/im java, Java\nis fun. . 11.6 . , g String RegExp, . 11.6. i g m , . , . . , . . ^ , $ .

11.1.7. Perl, JavaScript , ECMAScript v3 Perl 5. Perl, ECMAScript, : s ( ) x ( ); \a, \e, \l, \u, \L, \U, \E, \Q, \A, \Z, \z \G; (? ')"); f1.document.write("");

/ :f1.document.write("");

XHTML CDATA .

13.2.7. JavaScript , ( ) , . , , JavaScript , ! , HTML . :

264 :

13. JavaScript

JavaScript, Microsoft , Internet Explorer. event for . event , for , (ID), , . , . IE, . , , .

13.3. HTMLJavaScript , , , HTML . . , , . JavaScript HTML ( ), . , , , , HTML , :

onclick. onclick JavaScript . , . ( ), JavaScript , . Java Script ,

13.3. HTML

265

, . JavaScript JavaScript HTML . , JavaScript . 17 , HTML , JavaScript . JavaScript HTML , JavaScript , . Java Script , src . JavaScript , . 17, . 17 , : onclick , , . , . onclick false, , , , ( ) ( Submit). onmousedown, onmouseup onclick, , . . onmouseover, onmouseout , . onchange , . , , , . onload . , (, ) . onload , , . . , .

266

13. JavaScript

1.3. HTML . : calculate(), .

13.4. JavaScript URL JavaScript URL javascript:. , URL JavaScript , JavaScript. URL , /* */, //. URL , , :javascript:var now = new Date(); ":" + now;

URL , JavaScript . HTML , , , . URL JavaScript JavaScript , , . :javascript:alert("Hello World!")

URL , JavaScript , . . , . javascript: URL . , URL . , void . URL javascript: :void 0;

, , URL , :javascript:window.open("about:blank"); void 0;

void URL , Window.open(), , , :[object Window]

13.4. JavaScript URL

267

URL javascript: , URL . . JavaScript HTML . javascript: HTML , URL . href . , JavaScript . URL javascript: , , onclick. ( , onclick URL javascript: HTML ; , .) URL javascript: action JavaScript . URL javascript: , Window.open() ( . 14), URL .

13.4.1. URL javascript: , JavaScript, (bookmarklet). . href , URL javascript:. JavaScript , : JavaScript

: , , , (//) . :

268

13. JavaScript

JavaScript

, , , , , , . . Firefox . JavaScript, , , . , bookmarklets. , .

13.5. JavaScript JavaScript HTML . , JavaScript JavaScript.

13.5.1. JavaScript , , . , , ( defer IE ). JavaScript . , defer, document.write() ( 15). , , , . , HTML , , . HTML . , . , . , onload . , , document.write() . , . document.write(). , , ( , 15)

13.5. JavaScript

269

, , . , , , , . document.write() , , . , IE defer . , , , onload.

13.5.2. onload , (, ) , onload JavaScript , onload Window. onload onload . JavaScript onload ( , 17). onload, , , , . onload , JavaScript . Java Script , , , , , onload. , . onload , , document.write(). , , , .

13.5.3. URL JavaScript , onload JavaScript . , , . URL JavaScript , , , , javascript: href.

270

13. JavaScript

, , , . , , . document.write() , , . , , , . , write() . ( 14.8.)

13.5.4. onunload , onunload, JavaScript . onunload onunload, , 17. onunload , onload . , JavaScript , onunload , , , . onunload . , .

13.5.5. Window , URL JavaScript Window. JavaScript . , , , . onload , , onload , . , , Window : , , . . , . , , , , , .

13.5. JavaScript

271

Window , JavaScript . Window , . Window ,