Post on 17-Aug-2014
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. permissions@oreilly.com.
, , :
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 : bookquestions@oreilly.com , , 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 ,