Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΡΠ½ΠΎΠ²Ρ‹ программирования Π½Π° JavaScriptΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 12

Автор ΠœΠ°Ρ€ΠΊ Кан

ВрСмя послСдними свойствами Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΡΠ²Π»ΡΡŽΡ‚ΡΡ title, referer ΠΈ cookies. document.title ΠΈ document.referer достаточно понятны. document.title содСрТит Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ страницы. Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ послС ΠΏΠΎΠ»Π½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°. document.referer содСрТит просто URL страницы, которая ΠΏΡ€ΠΈΠ²Π΅Π»Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ страницу.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли Π²Ρ‹ Ρ‰Π΅Π»ΠΊΠ½ΡƒΠ»ΠΈ Π½Π° ссылкС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π½Π° эту страницу, Ρ‚ΠΎ document.referer Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ URL страницы, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ находится ссылка. Если Π²Ρ‹ ΠΏΡ€ΠΈΡˆΠ»ΠΈ Π½Π° эту страницу сразу, задавая Π΅Π΅ Π² ΠΏΠΎΠ»Π΅ адрСса Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°, Ρ‚ΠΎ document.referer Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½.

ПослСдняя Ρ‚Π΅ΠΌΠ° этой Π»Π΅ΠΊΡ†ΠΈΠΈ, пСрСмСнная cookie, отличаСтся ΠΎΡ‚ всСго ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π² JavaScript. cookie являСтся строкой тСкста, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ с ΠΎΠ΄Π½ΠΎΠΉ страницы Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ, Ссли Π²Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ΡΡŒ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈ Ρ‚ΠΎΠΌ ΠΆΠ΅ сСрвСрС. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² JavaScript, cookie Π½Π΅ стираСтся ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ страницы. cookie ΡΡ‚ΠΈΡ€Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° всС cookie ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅.

cookie Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ Ρ‡Π΅Ρ€Π΅Π· document.cookie. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… свойств ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ document.cookie Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½Π΅ пСрСзаписываСт, Π° добавляСт ΠΊ cookie. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли трСбуСтся Π·Π°Π΄Π°Ρ‚ΡŒ 5 cookie, Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· Π½ΠΈΡ… задаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ document.cookie= "...";. Π€ΠΎΡ€ΠΌΠ°Ρ‚ cookie ΠΈΠΌΠ΅Π΅Ρ‚ свои особСнности, поэтому ΠΌΡ‹ рассмотрим нСсколько Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для выполнСния этой Π·Π°Π΄Π°Ρ‡ΠΈ:


function writeCookie(name, value, days){ if(days){ (time = new Date()).setTime(new Date().getTime()+days*24*60*60*1000); var exp = '; expires='+time.toGMTString(); }else{ var exp=''; } document.cookie=name+"="+value+exp+"; path=/"; } function readCookie(name){ var cookies = document.cookie.split(';'); for(var i=0; i<cookies.length; i++){ var cookie=cookies[i].replace(/^\s+/, ''); if (cookie.indexOf(name+'=')==0) return cookie.substring(name.length+1); } return null; } function eraseCookie(name){ writeCookie(name, "", -1); }


Π’Ρ€ΠΈ эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ запись, Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ стираниС cookie Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ страницС. Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°:


function addToCounter(){ var counter = readCookie('myCounter'); if(counter){ counter = parseInt(counter); } else { counter = 0; } writeCookie('myCounter', counter+1, 1); } function showCounter(){ alert(readCookie('myCounter')); }


Если ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ счСтчик cookie нСсколько Ρ€Π°Π·, ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ страницу, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ счСтчик, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ остался Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅, ΠΊΠ°ΠΊ Π±Ρ‹Π» Π΄ΠΎ обновлСния страницы. Π­Ρ‚ΠΈ cookie Π±ΡƒΠ΄ΡƒΡ‚ сохранятся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΈ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹ ΠΈΠ· Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° ΠΈΠ»ΠΈ ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΡ€ΠΎΠΉΠ΄Π΅Ρ‚ 24 часа - cookie Π·Π°Π΄Π°Π½Ρ‹ Π½Π° ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ ΠΎΠ΄Π½ΠΈ сутки.

Π­Ρ‚ΠΎ ΠΏΠΎΡ‡Ρ‚ΠΈ всС ΠΎΠ± ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… ΠΎΠΊΠ½Π° ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π»Π΅ΠΊΡ†ΠΈΠΈ Ρ€Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎΠ± ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅.

ЛСкция 8. ΠžΡΠ½ΠΎΠ²Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования

ΠžΡΠ½ΠΎΠ²Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования (ООП) Π² JavaScript. new Object ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹. ΠŸΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Private, Public ΠΈ Static.

ΠŸΠΎΡ‡Ρ‚ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ соврСмСнный язык программирования ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ записи ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ (ОО) ΠΊΠΎΠ΄Π°. Если Π²Ρ‹ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с Ρ‚Π°ΠΊΠΈΠΌΠΈ языками, ΠΊΠ°ΠΊ C++, Java, VB, php ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ, Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π·Π½Π°ΠΊΠΎΠΌΡ‹ ΠΈ со структурой Class этих языков.

ΠšΠ»Π°ΡΡΡ‹ Π² этих языках ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ быстро ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ свойствами ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ, Π½Π΅ трСбуя ΠΏΡ€ΠΈ этом Π·Π°Π½ΠΎΠ²ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ всС эти свойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π’ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… структур ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ классы, Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ этих классов - Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ - Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. КаТдая функция Π² классС идСально Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ функциями, Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌΠΈ для этого класса.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Class ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Ρ†Π΅Π»ΠΎΠΌ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. НапримСр, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ класс Π’Π΅Π»Π΅Π²ΠΈΠ·ΠΎΡ€. Π’Π°ΠΊ ΠΊΠ°ΠΊ всС Ρ‚Π΅Π»Π΅Π²ΠΈΠ·ΠΎΡ€Ρ‹ Π² Ρ†Π΅Π»ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ, Ρ‚ΠΎ Π½Π΅Ρ‚ нСобходимости ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ мноТСство Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² Ρ‚Π΅Π»Π΅Π²ΠΈΠ·ΠΎΡ€Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Π½ΠΎΠ²Ρ‹ΠΉ. Π­Ρ‚ΠΎΡ‚ класс Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ свойства Ρ‚Π΅Π»Π΅Π²ΠΈΠ·ΠΎΡ€Π°. ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ свойства, ΠΊΠ°ΠΊ ΠΌΠ°Ρ€ΠΊΠ°, Ρ€Π°Π·ΠΌΠ΅Ρ€ экрана, ΠΈ Ρ‚.Π΄., ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ/Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ, ΡΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠ°Π½Π°Π», ΠΈ Ρ‚.Π΄.

JavaScript слСгка отличаСтся ΠΎΡ‚ стандартной ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ структуры Class. ВмСсто использования классов для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², каТдая функция Π² JavaScript ΠΌΠΎΠΆΠ΅Ρ‚ эффСктивно Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ класс. ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ (Prototyping), для выполнСния Ρ‚Π°ΠΊΠΈΡ… ΠΆΠ΅ Π²Π΅Ρ‰Π΅ΠΉ, ΠΊΠ°ΠΊ ΠΈ языки со структурами Class. Если Π²Ρ‹ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с ОО-языком Π½Π° основС классов, Ρ‚ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ сначала Π½Π΅ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½ΠΎΠΉ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠ΅ΠΉ, Π½ΠΎ ΠΎΠ½Π° ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ большиС возмоТности ΠΈ часто являСтся Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΎΠΉ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния программирования, Ρ‡Π΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

Для Π½Π°Ρ‡Π°Π»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Π² JavaScript. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΈ Π·Π°Π΄Π°Ρ‚ΡŒ Π·Π°Ρ‚Π΅ΠΌ для этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ любоС число свойств. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ это, Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€:


var myObj = new Object; myObj.a = 5; myObj['b'] = 10; myObj.c = 20; myObj.getTotal = function(){ alert(this.a+this.b+this.c); }; // ΠΈΠ»ΠΈ var myObj = {a:5, b:10, c:20, getTotal:function() { alert(this.a+this.b+this.c); }};


Оба эти Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° ΠΊΠΎΠ΄Π° ΡΠΎΠ·Π΄Π°ΡŽΡ‚ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ myObj. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ синтаксис new Object(), Π° Π·Π°Ρ‚Π΅ΠΌ опрСдСляСт всС свойства ΠΎΠ΄Π½ΠΎ Π·Π° Π΄Ρ€ΡƒΠ³ΠΈΠΌ. Π’Ρ‚ΠΎΡ€ΠΎΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π° являСтся сокращСнной Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ, которая Π΄Π΅Π»Π°Π΅Ρ‚ Π² точности Ρ‚ΠΎ ΠΆΠ΅ самоС. ΠœΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ myObj. myObj содСрТит Ρ‚Ρ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ для Ρ†Π΅Π»Ρ‹Ρ… чисСл: a, b ΠΈ c. Для доступа ΠΊ любой ΠΈΠ· Π½ΠΈΡ… ΠΌΡ‹ просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ myObj.a ΠΈΠ»ΠΈ myObj['a']. МоТно Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ myObj ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ Π² качСствС свойства Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ getTotal. ΠœΡ‹ обращаСмся ΠΊ getTotal Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈ ΠΊ свойствам a, b ΠΈ c: myObj.getTotal(). Ѐункция getTotal() обращаСтся ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ myObj с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ this. ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ this ссылаСтся Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС this ссылаСтся Π½Π° сам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ myObj.

Как ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² JavaScript ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ. К соТалСнию, часто приходится ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ слишком ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. НапримСр, Π΄Π°Π²Π°ΠΉΡ‚Π΅ создадим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Animal:


var myAnimal = { name: 'felix', species: 'cat', talk: function(){ alert('Meow!'); }, callOver: function(){ alert(this.name+' ignores you'); }, pet: function(){ alert('Purr!'); } }


ΠœΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ myAnimal, которая прСдставляСт ΠΊΠΎΡ‚Π° (cat) с ΠΈΠΌΠ΅Π½Π΅ΠΌ ЀСликс (felix). Однако, Ссли потрСбуСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΊΠΎΡ‚Π°, Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ввСсти всС это снова. Π—Π΄Π΅ΡΡŒ Π½Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄. ВмСсто ΠΏΠ΅Ρ€Π΅ΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠΈ всякий Ρ€Π°Π· всСго ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая создаСт для нас Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚:


function Cat(name){ this.name = name; this.species = 'Cat'; this.talk = function(){ alert('Meow!'); } this.callOver = function(){ alert(this.name+' ignores you'); }, this.pet = function(){ alert('Purr!'); } } var felix = new Cat('Felix'); var sam = new Cat('Sam'); var patty = new Cat('Patty'); felix.pet(); // Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ 'Purr!' sam.callOver(); // Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ 'Sam ignores you'. ΠŸΡ€ΠΎΡΡ‚ΠΎ, ΠΊΠ°ΠΊ ΠΊΠΎΡ‚! alert(patty.species); // Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ 'Cat'


Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ создана ΠΎΠ΄Π½Π° функция Cat, Π° Π·Π°Ρ‚Π΅ΠΌ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Ρ‚Ρ€ΠΈ Π½ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΡ‚Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: Felix, Sam ΠΈ Patty. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· этих ΠΊΠΎΡ‚ΠΎΠ² ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: talk, callOver ΠΈ pet, ΠΈ каТдая ΠΈΠ· Π½ΠΈΡ… ΠΈΠΌΠ΅Π΅Ρ‚ свойство species, Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΠΊΠ°ΠΊ 'cat'. И ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ всСм ΠΊΠΎΡ‚Π°ΠΌ, ΠΎΠ½ΠΈ Π² Ρ€Π°Π²Π½ΠΎΠΉ стСпСни своСнравны.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ говорят, Ρ‡Ρ‚ΠΎ felix, sam ΠΈ patty ΡΠ²Π»ΡΡŽΡ‚ΡΡ экзСмплярами ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°: Cat. Код самой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Cat называСтся конструктором. ΠœΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Π΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ name ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π΅Π΅ для задания this.name. К соТалСнию, ΠΏΡ€ΠΈ объявлСнии ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Cat Π² конструкторС Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ создаСтся новая копия ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ всякий Ρ€Π°Π· ΠΏΡ€ΠΈ создании Π½ΠΎΠ²ΠΎΠ³ΠΎ Cat. Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ talk, callOver ΠΈ pet ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ΠΌΠΈ, Ρ‚ΠΎ Π½Π°ΠΌ Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ трСбуСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° копия ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π—Π΄Π΅ΡΡŒ Π½Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

МоТно ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Cat Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ каТдая функция объявлялась Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·:


function Cat(name){ this.name = name; } Cat.prototype.species = 'Cat'; Cat.prototype.talk = function(){ alert('Meow!'); }; Cat.prototype.callOver = function(){ alert(this.name+' ignores you'); }; Cat.prototype.pet = function(){ alert('Purr!'); };


Бинтаксис этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ отличаСтся ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ. ВмСсто объявлСния всСх свойств ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Cat, ΠΎΠ½ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Cat.prototype. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π±ΠΎΠ»Π΅Π΅ слоТным, Π½ΠΎ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ прСимущСств. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎ Π½Π°Π΄ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ sleep для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎΡΡ cat. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ двумя способами. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ: ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ sleep Π² felix, sam ΠΈ patty. Π­Ρ‚ΠΎ, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Ρ€ΡƒΠ΄ΠΎΠ΅ΠΌΠΊΠΎ, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ нСэффСктивно. Если Π±Ρ‹ имСлось 500 cat, Ρ‚ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ Π±Ρ‹ сначала ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ всСх этих 500 ΠΊΠΎΡ‚ΠΎΠ², Π° Π·Π°Ρ‚Π΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ cat.