From Philip
3. DOM optimization (events delegation, batches, doc fragment, throttle, debounce, unsubscribe, remove DOM refs in variables)
events delegation
ΠΡΠΏΠ»ΡΡΠΈΠ΅ ΠΈ ΠΏΠ΅ΡΠ΅Ρ Π²Π°Ρ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°ΠΌΡΡ Π²Π°ΠΆΠ½ΡΡ ΠΏΡΠΈΡΠΌΠΎΠ² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ β Π΄Π΅Π»Π΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅.
ΠΠ΄Π΅Ρ Π² ΡΠΎΠΌ, ΡΡΠΎ Π΅ΡΠ»ΠΈ Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΡΠΎΠ±ΡΡΠΈΡ Π½Π° ΠΊΠΎΡΠΎΡΡΡ Π½ΡΠΆΠ½ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΏΠΎΡ ΠΎΠΆΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠΎ Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π½Π°Π·Π½Π°ΡΠ°ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ, ΠΌΡ ΡΡΠ°Π²ΠΈΠΌ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π½Π° ΠΈΡ ΠΎΠ±ΡΠ΅Π³ΠΎ ΠΏΡΠ΅Π΄ΠΊΠ°.
ΠΠ· Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ event.target
, ΠΏΠΎΠ½ΡΡΡ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠ΅ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΅Π³ΠΎ.
Π Π°Π·Π±Π΅ΡΡΠΌ ΠΏΡΠΈΠΌΠ΅Ρ:
ΠΠ΅ΡΠΎΠ΄
elem.closest(selector)
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π±Π»ΠΈΠΆΠ°ΠΉΡΠ΅Π³ΠΎ ΠΏΡΠ΅Π΄ΠΊΠ°, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΡΠ΅Π»Π΅ΠΊΡΠΎΡΡ. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π°ΠΌ Π½ΡΠΆΠ΅Π½<td>
, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΠΉΡΡ Π²ΡΡΠ΅ ΠΏΠΎ Π΄Π΅ΡΠ΅Π²Ρ ΠΎΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°.ΠΡΠ»ΠΈ
event.target
Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ Π²Π½ΡΡΡΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°<td>
, ΡΠΎ Π²ΡΠ·ΠΎΠ² Π²Π΅ΡΠ½ΡΡnull
, ΠΈ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄ΡΡ.ΠΡΠ»ΠΈ ΡΠ°Π±Π»ΠΈΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅,
event.target
ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ<td>
, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΠΉΡΡ Π²Π½Π΅ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΠ°Π±Π»ΠΈΡΡ. Π ΡΠ°ΠΊΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π»ΠΈ ΡΡΠΎ<td>
Π½Π°ΡΠ΅ΠΉ ΡΠ°Π±Π»ΠΈΡΡ.Π Π΅ΡΠ»ΠΈ ΡΡΠΎ ΡΠ°ΠΊ, ΡΠΎ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΈΠ²Π°Π΅ΠΌ Π΅Π³ΠΎ.
Π ΠΈΡΠΎΠ³Π΅ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΠΊΠΎΡΠΎΡΠΊΠΈΠΉ ΠΊΠΎΠ΄ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΊΠΈ, Π±ΡΡΡΡΡΠΉ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ, ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π½Π΅ Π²Π°ΠΆΠ½ΠΎ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΠ΅Π³ΠΎ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ <td>
.
doc fragment
documentFragment - "ΡΡΠ°Π³ΠΌΠ΅Π½Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°" Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π±Π»ΠΈΠ·ΠΎΠΊ ΠΏΠΎ ΡΠΌΡΡΠ»Ρ ΠΊ ΠΎΠ±ΡΡΠ½ΠΎΠΌΡ DOM-ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ.
ΠΡΡΠ°Π²ΠΈΡΡ ΠΏΠ°ΡΠΊΡ ΡΠ·Π»ΠΎΠ² Π΅Π΄ΠΈΠ½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ DocumentFragment
. ΠΡΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΡΠΉ ΠΊΡΠΎΡΡ-Π±ΡΠ°ΡΠ·Π΅ΡΠ½ΡΠΉ DOM-ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΡ
ΠΎΠΆ Π½Π° ΠΎΠ±ΡΡΠ½ΡΠΉ DOM-ΡΠ·Π΅Π», Π½ΠΎ ΠΈΠΌ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ.
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π΄Π»Ρ Π΅Π³ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ:
Π Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ·Π»Ρ.
ΠΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°ΡΡ:
Π£ DocumentFragment
Π½Π΅Ρ ΠΎΠ±ΡΡΠ½ΡΡ
ΡΠ²ΠΎΠΉΡΡΠ² DOM-ΡΠ·Π»ΠΎΠ², ΡΠ°ΠΊΠΈΡ
ΠΊΠ°ΠΊ innerHTML
, tagName
ΠΈ Ρ.ΠΏ. ΠΡΠΎ Π½Π΅ ΡΠ·Π΅Π».
ΠΠ³ΠΎ Β«Π€ΠΈΡΠΊΠ°Β» Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΊΠΎΠ³Π΄Π° DocumentFragment
Π²ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π² DOM β ΡΠΎ ΠΎΠ½ ΠΈΡΡΠ΅Π·Π°Π΅Ρ, Π° Π²ΠΌΠ΅ΡΡΠΎ Π½Π΅Π³ΠΎ Π²ΡΡΠ°Π²Π»ΡΡΡΡΡ Π΅Π³ΠΎ Π΄Π΅ΡΠΈ. ΠΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΡ DocumentFragment
.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² Π½Π΅Π³ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ LI
, ΠΈ ΠΏΠΎΡΠΎΠΌ Π²ΡΠ·Π²Π°ΡΡ ul.appendChild(fragment)
, ΡΠΎ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΡΠ°ΡΡΠ²ΠΎΡΠΈΡΡΡ, ΠΈ Π² DOM Π²ΡΡΠ°Π²ΡΡΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ LI
, ΠΏΡΠΈΡΡΠΌ Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π±ΡΠ»ΠΈ Π²ΠΎ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ΅.
ΠΡΠ΅Π²Π΄ΠΎΠΊΠΎΠ΄:
ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ: ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Β«ΠΏΠΎΡΡΠΈΡΡΡΒ». Π’ΠΎΡΠ½Π΅Π΅ β ΠΎΠΏΡΡΡΠΎΡΠ°Π΅ΡΡΡ. ΠΠΎΠ³Π΄Π° ΠΌΡ Π΄Π΅Π»Π°Π΅ΠΌ div.appendChild(fragment)
, Π²ΡΠ΅ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° ΠΏΠ΅ΡΠ΅Π½ΠΎΡΡΡΡΡ Π² div
. Π ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΠ½ΠΈ ΠΈΠ· ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° ΠΈΠ·ΡΠΌΠ°ΡΡΡΡ! Π§ΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ Π² ΡΠ»ΡΡΠ°Π΅, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΎ Π½Π΅ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ cloneNode
.
throttle and debounce
Π’ΡΠΎΡΡΠ»ΠΈΠ½Π³ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°Π·Π° Π² ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ ΠΏΠ΅ΡΠΈΠΎΠ΄ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°Π· Π² 10 ΡΠ΅ΠΊΡΠ½Π΄). ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ β ΡΡΠΎΡΡΠ»ΠΈΠ½Π³ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Π΅Ρ Π·Π°ΠΏΡΡΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ, Π΅ΡΠ»ΠΈ ΠΎΠ½Π° ΡΠΆΠ΅ Π·Π°ΠΏΡΡΠΊΠ°Π»Π°ΡΡ Π½Π΅Π΄Π°Π²Π½ΠΎ. Π’ΡΠΎΡΡΠ»ΠΈΠ½Π³ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ½ΠΎΡΡΡΡ.
Debouncing ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ Π±ΡΠ΄ΡΡ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΈ Π½Π΅ ΠΏΡΠ΅ΠΊΡΠ°ΡΡΡΡΡ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠΉ ΠΏΠ΅ΡΠΈΠΎΠ΄ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. Π’ΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΡ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½Π°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΠΌΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ ΡΠ°ΠΉΠΌΠ΅Ρ Π½Π° 2 ΡΠ΅ΠΊΡΠ½Π΄Ρ, Π° ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ 10 ΡΠ°Π· Ρ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»ΠΎΠΌ Π² ΠΎΠ΄Π½Ρ ΡΠ΅ΠΊΡΠ½Π΄Ρ, ΡΠΎ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π²ΡΠ·ΠΎΠ² ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΏΡΡΡΡ 2 ΡΠ΅ΠΊΡΠ½Π΄Ρ ΠΏΠΎΡΠ»Π΅ ΠΊΡΠ°ΠΉΠ½Π΅Π³ΠΎ (Π΄Π΅ΡΡΡΠΎΠ³ΠΎ) ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅: Π²ΠΈΠ΄Π΅ΠΎ ΠΈΠ³ΡΡ(ΡΡΠΎΡΡΠ»ΠΈΠ½Π³ Π΄Π»Ρ Π²ΡΡΡΡΠ΅Π»Π° Π² 1 ΡΠ΅ΠΊ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·), Π°Π²ΡΠΎΠ·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅(Π΅ΡΠ»ΠΈ Π±Ρ Π½Π΅ debounce ΠPI Π΄Π΅ΡΠ³Π°Π»ΡΡ Π±Ρ ΠΏΠΎΡΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π±ΡΠΊΠ²Ρ)
Useful link:
4. event.stopPropagation() vs event.preventDefault()
event.stopPropagation()
ΠΡΠΏΠ»ΡΡΠΈΠ΅ ΠΈΠ΄ΡΡ Ρ Β«ΡΠ΅Π»Π΅Π²ΠΎΠ³ΠΎΒ» ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΏΡΡΠΌΠΎ Π½Π°Π²Π΅ΡΡ
. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠΎΠ±ΡΡΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠ»ΡΠ²Π°ΡΡ Π΄ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° <html>
, Π° Π·Π°ΡΠ΅ΠΌ Π΄ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° document
, Π° ΠΈΠ½ΠΎΠ³Π΄Π° Π΄Π°ΠΆΠ΅ Π΄ΠΎ window
, Π²ΡΠ·ΡΠ²Π°Ρ Π²ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π½Π° ΡΠ²ΠΎΡΠΌ ΠΏΡΡΠΈ.
ΠΠΎ Π»ΡΠ±ΠΎΠΉ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½ΠΎ, ΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π²ΡΠΏΠ»ΡΡΠΈΠ΅.
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ event.stopPropagation()
.
ΠΡΠ»ΠΈ Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² Π½Π° ΠΎΠ΄Π½ΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅, ΡΠΎ Π΄Π°ΠΆΠ΅ ΠΏΡΠΈ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ΅Π½ΠΈΠΈ Π²ΡΠΏΠ»ΡΡΠΈΡ Π²ΡΠ΅ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Ρ.
Π’ΠΎ Π΅ΡΡΡ, event.stopPropagation()
ΠΏΡΠ΅ΠΏΡΡΡΡΠ²ΡΠ΅Ρ ΠΏΡΠΎΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΡΠΎΠ±ΡΡΠΈΡ Π΄Π°Π»ΡΡΠ΅, Π½ΠΎ Π½Π° ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ Π²ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π±ΡΠ΄ΡΡ Π²ΡΠ·Π²Π°Π½Ρ.
ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄ event.stopImmediatePropagation()
. ΠΠ½ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Π΅Ρ Π²ΡΠΏΠ»ΡΡΠΈΠ΅, Π½ΠΎ ΠΈ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΡΠΎΠ±ΡΡΠΈΠΉ Π½Π° ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅.
event.preventDefault()
ΠΠ΅ΠΉΡΡΠ²ΠΈΡ Π±ΡΠ°ΡΠ·Π΅ΡΠ° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
ΠΠ½ΠΎΠ³ΠΈΠ΅ ΡΠΎΠ±ΡΡΠΈΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²Π»Π΅ΠΊΡΡ Π·Π° ΡΠΎΠ±ΠΎΠΉ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π±ΡΠ°ΡΠ·Π΅ΡΠ°.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
ΠΠ»ΠΈΠΊ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ ΠΈΠ½ΠΈΡΠΈΠΈΡΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ Π½Π° Π½ΠΎΠ²ΡΠΉ URL.
ΠΠ°ΠΆΠ°ΡΠΈΠ΅ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ Β«ΠΎΡΠΏΡΠ°Π²ΠΈΡΡΒ» Π² ΡΠΎΡΠΌΠ΅ β ΠΎΡΡΡΠ»ΠΊΡ Π΅Ρ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ.
ΠΠ°ΠΆΠ°ΡΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΡΡΠΈ Π½Π°Π΄ ΡΠ΅ΠΊΡΡΠΎΠΌ ΠΈ Π΅Ρ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π² ΡΠ°ΠΊΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ β ΠΈΠ½ΠΈΡΠΈΠΈΡΡΠ΅Ρ Π΅Π³ΠΎ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅.
ΠΡΠ»ΠΈ ΠΌΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌ ΡΠΎΠ±ΡΡΠΈΠ΅ Π² JavaScript, ΡΠΎ Π·Π°ΡΠ°ΡΡΡΡ ΡΠ°ΠΊΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π±ΡΠ°ΡΠ·Π΅ΡΠ° Π½Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ. Π ΡΡΠ°ΡΡΡΡ, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅Π½ΠΈΡΡ.
ΠΡΡΡ Π΄Π²Π° ΡΠΏΠΎΡΠΎΠ±Π° ΠΎΡΠΌΠ΅Π½ΠΈΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π±ΡΠ°ΡΠ·Π΅ΡΠ°:
ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± β ΡΡΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ
event
. ΠΠ»Ρ ΠΎΡΠΌΠ΅Π½Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π±ΡΠ°ΡΠ·Π΅ΡΠ° ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄event.preventDefault()
.ΠΡΠ»ΠΈ ΠΆΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π½Π°Π·Π½Π°ΡΠ΅Π½ ΡΠ΅ΡΠ΅Π·
on<ΡΠΎΠ±ΡΡΠΈΠ΅>
(Π½Π΅ ΡΠ΅ΡΠ΅Π·addEventListener
), ΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Π΅ΡΠ½ΡΡΡfalse
ΠΈΠ· ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°.
Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΡΠΈ ΠΊΠ»ΠΈΠΊΠ΅ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ Π½Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄ΡΡ:
5. ΠΡΠΏΠ»ΡΡΠΈΠ΅/ΠΏΠΎΠ³ΡΡΠΆΠ΅Π½ΠΈΠ΅/ΠΏΠ΅ΡΠ΅Ρ
Π²Π°Ρ ΡΠΎΠ±ΡΡΠΈΡ
Π€Π°Π·Π° ΠΏΠΎΠ³ΡΡΠΆΠ΅Π½ΠΈΡ (capturing phase) β ΡΠΎΠ±ΡΡΠΈΠ΅ ΡΠ½Π°ΡΠ°Π»Π° ΠΈΠ΄ΡΡ ΡΠ²Π΅ΡΡ Ρ Π²Π½ΠΈΠ·.
Π€Π°Π·Π° ΡΠ΅Π»ΠΈ (target phase) β ΡΠΎΠ±ΡΡΠΈΠ΅ Π΄ΠΎΡΡΠΈΠ³Π»ΠΎ ΡΠ΅Π»Π΅Π²ΠΎΠ³ΠΎ(ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ) ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°.
Π€Π°Π·Π° Π²ΡΠΏΠ»ΡΡΠΈΡ (bubbling stage) β ΡΠΎΠ±ΡΡΠΈΠ΅ Π½Π°ΡΠΈΠ½Π°Π΅Ρ Π²ΡΠΏΠ»ΡΠ²Π°ΡΡ.
ΠΡΠΈ Π½Π°ΡΡΡΠΏΠ»Π΅Π½ΠΈΠΈ ΡΠΎΠ±ΡΡΠΈΡ β ΡΠ°ΠΌΡΠΉ Π³Π»ΡΠ±ΠΎΠΊΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ, ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ ΠΊΠ°ΠΊ Β«ΡΠ΅Π»Π΅Π²ΠΎΠΉΒ» (event.target
).
ΠΠ°ΡΠ΅ΠΌ ΡΠΎΠ±ΡΡΠΈΠ΅ ΡΠ½Π°ΡΠ°Π»Π° Π΄Π²ΠΈΠ³Π°Π΅ΡΡΡ Π²Π½ΠΈΠ· ΠΎΡ ΠΊΠΎΡΠ½Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° ΠΊ
event.target
, ΠΏΠΎ ΠΏΡΡΠΈ Π²ΡΠ·ΡΠ²Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ, ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ ΡΠ΅ΡΠ΅Π·addEventListener(...., true)
, Π³Π΄Π΅true
β ΡΡΠΎ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ{capture: true}
.ΠΠ°Π»Π΅Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π½Π° ΡΠ΅Π»Π΅Π²ΠΎΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅.
ΠΠ°Π»Π΅Π΅ ΡΠΎΠ±ΡΡΠΈΠ΅ Π΄Π²ΠΈΠ³Π°Π΅ΡΡΡ ΠΎΡ
event.target
Π²Π²Π΅ΡΡ ΠΊ ΠΊΠΎΡΠ½Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°, ΠΏΠΎ ΠΏΡΡΠΈ Π²ΡΠ·ΡΠ²Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ, ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ ΡΠ΅ΡΠ΅Π·on<event>
ΠΈaddEventListener
Π±Π΅Π· ΡΡΠ΅ΡΡΠ΅Π³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΈΠ»ΠΈ Ρ ΡΡΠ΅ΡΡΠΈΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΡΠ°Π²Π½ΡΠΌfalse
.
ΠΠ°ΠΆΠ΄ΡΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΈΠΌΠ΅Π΅Ρ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌ ΡΠΎΠ±ΡΡΠΈΡ event
:
event.target
β ΡΠ°ΠΌΡΠΉ Π³Π»ΡΠ±ΠΎΠΊΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅.event.currentTarget
(=this
) β ΡΠ»Π΅ΠΌΠ΅Π½Ρ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΡΠ°Π±ΠΎΡΠ°Π» ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ (ΡΠΎΡ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ Β«Π²ΠΈΡΠΈΡΒ» ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ)event.eventPhase
β Π½Π° ΠΊΠ°ΠΊΠΎΠΉ ΡΠ°Π·Π΅ ΠΎΠ½ ΡΡΠ°Π±ΠΎΡΠ°Π» (ΠΏΠΎΠ³ΡΡΠΆΠ΅Π½ΠΈΠ΅=1, ΡΠ°Π·Π° ΡΠ΅Π»ΠΈ=2, Π²ΡΠΏΠ»ΡΡΠΈΠ΅=3).
ΠΡΠ±ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠΎΠ±ΡΡΠΈΠ΅ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ event.stopPropagation()
, Π½ΠΎ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ Π½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ ΡΡΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ, ΠΈΠ½ΠΎΠ³Π΄Π° Π΄Π»Ρ ΡΠ°ΠΌΡΡ
Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΡΡ
Π²Π΅ΡΠ΅ΠΉ.
ΠΡΠ°ΠΊ, ΠΏΡΠΈ ΠΊΠ»ΠΈΠΊΠ΅ Π½Π° <td>
ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΏΡΡΠ΅ΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΏΠΎ ΡΠ΅ΠΏΠΎΡΠΊΠ΅ ΡΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΉ ΡΠ½Π°ΡΠ°Π»Π° Π²Π½ΠΈΠ· ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ (ΠΏΠΎΠ³ΡΡΠΆΠ°Π΅ΡΡΡ), Π·Π°ΡΠ΅ΠΌ ΠΎΠ½ΠΎ Π΄ΠΎΡΡΠΈΠ³Π°Π΅Ρ ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ (ΡΠ°Π·Π° ΡΠ΅Π»ΠΈ), Π° ΠΏΠΎΡΠΎΠΌ ΠΈΠ΄ΡΡ Π½Π°Π²Π΅ΡΡ
(Π²ΡΠΏΠ»ΡΡΠΈΠ΅), Π²ΡΠ·ΡΠ²Π°Ρ ΠΏΠΎ ΠΏΡΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ.
ΠΡΠΏΠ»ΡΡΠΈΠ΅ ΠΈΠ΄ΡΡ ΠΏΡΡΠΌΠΎ Π½Π°Π²Π΅ΡΡ
. ΠΠ±ΡΡΠ½ΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠ»ΡΠ²Π°ΡΡ Π½Π°Π²Π΅ΡΡ
ΠΈ Π½Π°Π²Π΅ΡΡ
, Π΄ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° <html>
, Π° Π·Π°ΡΠ΅ΠΌ Π΄ΠΎ document
, Π° ΠΈΠ½ΠΎΠ³Π΄Π° Π΄Π°ΠΆΠ΅ Π΄ΠΎ window
, Π²ΡΠ·ΡΠ²Π°Ρ Π²ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π½Π° ΡΠ²ΠΎΡΠΌ ΠΏΡΡΠΈ.
ΠΠΎ Π»ΡΠ±ΠΎΠΉ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½ΠΎ, ΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π²ΡΠΏΠ»ΡΡΠΈΠ΅.
ΠΠ»Ρ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π²ΡΠΏΠ»ΡΡΠΈΡ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ event.stopPropagation()
.
Π§Π°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΠ΅ΡΡ ΠΈΠ΄Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎ Π²ΡΠΏΠ»ΡΡΠΈΠΈ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ°Π΄ΠΈΠΈ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΈ ΠΏΡΠΎΡ ΠΎΠ΄ΡΡ Π½Π΅Π·Π°ΠΌΠ΅ΡΠ½ΠΎ Π΄Π»Ρ Π½Π°Ρ.
ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΡΠ΅ ΡΠ΅ΡΠ΅Π· on<event>
-ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΈΠ»ΠΈ ΡΠ΅ΡΠ΅Π· HTML-Π°ΡΡΠΈΠ±ΡΡΡ, ΠΈΠ»ΠΈ ΡΠ΅ΡΠ΅Π· addEventListener(event, handler)
Ρ Π΄Π²ΡΠΌΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ, Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π·Π½Π°ΡΡ ΠΎ ΡΠ°Π·Π΅ ΠΏΠΎΠ³ΡΡΠΆΠ΅Π½ΠΈΡ, Π° ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° 2-ΠΎΠΉ ΠΈ 3-Π΅ΠΉ ΡΠ°Π·Π°Ρ
.
Π§ΡΠΎΠ±Ρ ΠΏΠΎΠΉΠΌΠ°ΡΡ ΡΠΎΠ±ΡΡΠΈΠ΅ Π½Π° ΡΡΠ°Π΄ΠΈΠΈ ΠΏΠΎΠ³ΡΡΠΆΠ΅Π½ΠΈΡ, Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ΅ΡΠΈΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ capture
Π²ΠΎΡ ΡΠ°ΠΊ:
Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡ Π΄Π²Π° Π²Π°ΡΠΈΠ°Π½ΡΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΎΠΏΡΠΈΠΈ capture
:
ΠΡΠ»ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ
false
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ), ΡΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΉΠΌΠ°Π½ΠΎ ΠΏΡΠΈ Π²ΡΠΏΠ»ΡΡΠΈΠΈ.ΠΡΠ»ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ
true
, ΡΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΠ΅Π½ΠΎ ΠΏΡΠΈ ΠΏΠΎΠ³ΡΡΠΆΠ΅Π½ΠΈΠΈ.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Ρ ΠΎΡΡ ΠΈ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ 3 ΡΠ°Π·Ρ, 2-ΡΡ ΡΠ°Π·Ρ (Β«ΡΠ°Π·Ρ ΡΠ΅Π»ΠΈΒ»: ΡΠΎΠ±ΡΡΠΈΠ΅ Π΄ΠΎΡΡΠΈΠ³Π»ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°) Π½Π΅Π»ΡΠ·Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ, ΠΏΡΠΈ Π΅Ρ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π²ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ: ΠΈ Π½Π° Π²ΡΠΏΠ»ΡΡΠΈΠ΅, ΠΈ Π½Π° ΠΏΠΎΠ³ΡΡΠΆΠ΅Π½ΠΈΠ΅.
6. ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅/Π½Π°Π²ΠΈΠ³Π°ΡΠΈΡ ΠΏΠΎ DOM
OR
JS:
1. Modules types in JS
ΠΠΎΠ΄ΡΠ»ΠΈ β ΡΡΠΎ ΠΏΠ°ΡΡΠ΅ΡΠ½, ΠΊΠΎΡΠΎΡΡΠΉ Π² ΡΠ°Π·Π½ΡΡ ΡΠΎΡΠΌΠ°Ρ ΠΈ Π½Π° ΡΠ°Π·Π½ΡΡ ΡΠ·ΡΠΊΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌΠΈ Ρ 60-Ρ ΠΈ 70-Ρ Π³ΠΎΠ΄ΠΎΠ².
Π ΠΈΠ΄Π΅Π°Π»Π΅, ΠΌΠΎΠ΄ΡΠ»ΠΈ JavaScript ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π½Π°ΠΌ:
Π°Π±ΡΡΡΠ°Π³ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌ, ΡΠ°ΠΊ ΡΡΠΎ Π½Π°ΠΌ Π½Π΅ ΠΏΡΠΈΠ΄ΡΡΡΡ ΡΠ°Π·Π±ΠΈΡΠ°ΡΡΡΡ Π²ΠΎ Π²ΡΠ΅Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡΡ ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ;
ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄, ΡΠΊΡΡΠ²Π°Ρ Π΅Π³ΠΎ Π²Π½ΡΡΡΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ, Π΅ΡΠ»ΠΈ Π½Π΅ Ρ ΠΎΡΠΈΠΌ, ΡΡΠΎΠ±Ρ Π΅Π³ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΠ»ΠΈ;
ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄, ΠΈΠ·Π±Π°Π²Π»ΡΡΡΡ ΠΎΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΠΈΡΠ°ΡΡ ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅ ΡΠ½ΠΎΠ²Π° ΠΈ ΡΠ½ΠΎΠ²Π°;
ΡΠΏΡΠ°Π²Π»ΡΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ, Π»Π΅Π³ΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΡΠ²Π°ΡΡ Π½Π°Ρ ΠΊΠΎΠ΄.
Π€ΠΎΡΠΌΠ°ΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ
Π€ΠΎΡΠΌΠ°Ρ ΠΌΠΎΠ΄ΡΠ»Ρ β ΡΡΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π΅Π³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ.
ΠΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ECMAScript 6, ΠΈΠ»ΠΈ ES2015, Π² JavaScript Π½Π΅ Π±ΡΠ»ΠΎ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ. Π Π·Π½Π°ΡΠΈΡ, ΠΎΠΏΡΡΠ½ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π»ΠΈ ΡΠ°Π·Π½ΡΠ΅ ΡΠΎΡΠΌΠ°ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ.
ΠΠΎΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΡ ΠΈ ΡΠΈΡΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ :
Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ (Asynchronous Module Definition ΠΈΠ»ΠΈ AMD);
CommonJS;
ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ (Universal Module Definition ΠΈΠ»ΠΈ UMD);
System.register;
ΡΠΎΡΠΌΠ°Ρ ΠΌΠΎΠ΄ΡΠ»Ρ ES6.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· Π½ΠΈΡ , ΡΡΠΎΠ±Ρ Π²Ρ ΡΠΌΠΎΠ³Π»ΠΈ ΡΠ°ΡΠΏΠΎΠ·Π½Π°ΡΡ ΠΈΡ ΠΏΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΡ.
ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ (AMD)
Π€ΠΎΡΠΌΠ°Ρ AMD ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ°Ρ ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΡΡΠ½ΠΊΡΠΈΡ define:
Π€ΠΎΡΠΌΠ°Ρ CommonJS
Π€ΠΎΡΠΌΠ°Ρ CommonJS ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π² Node.js ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΈ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ require ΠΈ module.exports:
Π£Π½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ (UMD)
Π€ΠΎΡΠΌΠ°Ρ UMD ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ ΠΊΠ°ΠΊ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅, ΡΠ°ΠΊ ΠΈ Π² Node.js.
System.registerΠ
Π€ΠΎΡΠΌΠ°Ρ System.register Π±ΡΠ» ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ES6 Π² ES5:
Π€ΠΎΡΠΌΠ°Ρ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ES6
Π ES6 JavaScript ΡΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ.
ΠΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠΎΠΊΠ΅Π½ export Π΄Π»Ρ ΡΠΊΡΠΏΠΎΡΡΠ° ΠΏΡΠ±Π»ΠΈΡΠ½ΠΎΠ³ΠΎ API ΠΌΠΎΠ΄ΡΠ»Ρ:
ΠΈ ΡΠΎΠΊΠ΅Π½ import Π΄Π»Ρ ΠΈΠΌΠΏΠΎΡΡΠ° ΡΠ°ΡΡΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅Ρ:
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π°ΠΆΠ΅ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°ΡΡ ΠΈΠΌΠΏΠΎΡΡΡ Π°Π»ΠΈΠ°Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ as:
ΠΈΠ»ΠΈ Π·Π°Π³ΡΡΠΆΠ°ΡΡ ΡΡΠ°Π·Ρ Π²Π΅ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ:
Π€ΠΎΡΠΌΠ°Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΊΡΠΏΠΎΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ:
ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΊ:
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ, Π½ΠΎ ΠΈ Π²ΡΡ, ΡΡΠΎ ΠΏΠΎΠΆΠ΅Π»Π°Π΅ΡΠ΅:
Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΏΠΎΠΊΠ° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π½Π΅ Π²ΡΠ΅ Π±ΡΠ°ΡΠ·Π΅ΡΡ.
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΡΠΌΠ°Ρ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ES6 ΡΠΆΠ΅ ΡΠ΅Π³ΠΎΠ΄Π½Ρ, Π½ΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ Babel, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡΡ Π½Π°Ρ ΠΊΠΎΠ΄ Π² ΡΠΎΡΠΌΠ°Ρ ES5, ΡΠ°ΠΊΠΎΠΉ, ΠΊΠ°ΠΊ AMD ΠΈΠ»ΠΈ CommonJS, ΠΏΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠ΅Π½ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅.
Useful link:
2. Encapsulation in JS
ΠΠ»Π°ΡΡΡ Get, Set in object ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΠ΅
3. Immutability, types, prevent object from writing
const object
ΠΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°Π·Π½Π°ΡΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠ΅ΠΌΡ-ΡΠΎ Π΄ΡΡΠ³ΠΎΠΌΡ, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ let ΠΈ var, Π½ΠΎ Π²Ρ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΡΠ΄Π°Π»ΠΈΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ.
Object.preventExtensions(myObject)
ΠΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΡΡ ΡΠ²ΠΎΠΉΡΡΠ² ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ² ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ.
Object.seal(myObject)
ΠΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΡΡ ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ² Π² ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈ ΠΈΠ· ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Π½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ² ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ.
Object.freeze(myObject)
ΠΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. Π‘ Π·Π°ΠΌΠΎΡΠ°ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ Π²Ρ ΡΠ²Π΅ΡΠ΅Π½Ρ, ΡΡΠΎ ΠΎΠ½ Π½ΠΈΠ³Π΄Π΅ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΡΡ Π² Π²Π°ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅.
Useful link:
4. Property descriptors
ΠΠ΅ΡΠΎΠ΄ Object.defineProperty - ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ (ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ, ΡΠ΄Π°Π»ΡΡΡ ΠΈ Π΄Ρ.)
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ
ΠΠ΅ΡΠΊΡΠΈΠΏΡΠΎΡ - ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π°. Π Π½Π΅ΠΌ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° (Π² ΡΠΊΠΎΠ±ΠΊΠ°Ρ ΡΠΊΠ°Π·Π°Π½Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ):
ΠΡΠ»ΠΈ ΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΠΌ ΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ Π·Π°ΠΏΡΠ΅ΡΠ΅Π½Π½ΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ writable = false, ΡΠΎ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ (Π° Π² ΡΡΡΠΎΠ³ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ (ΠΏΡΠΈ ΡΠΊΠ°Π·Π°Π½ΠΈΠΈ 'use strict') - Π±ΡΠ΄Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠ°). Π’Π°ΠΊΠΆΠ΅ Π·Π°ΠΏΡΠ΅ΡΠ΅Π½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ value/writeble Π΅ΡΠ»ΠΈ ΡΠΊΠ°Π·Π°Π½Ρ get/set.
ΠΠ΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° β ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΡΠΉ JavaScript-ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠΉ Π°ΡΡΠΈΠ±ΡΡΡ ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π°.
ΠΠ΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ ΡΠ²ΠΎΠΉΡΡΠ², ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡΠΈΠ΅ Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ°Ρ , Π±ΡΠ²Π°ΡΡ Π΄Π²ΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΠΈΠΏΠΎΠ²: Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ Π΄Π°Π½Π½ΡΡ ΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ Π΄ΠΎΡΡΡΠΏΠ°.
ΠΠ΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π΄Π°Π½Π½ΡΡ - ΡΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ, ΠΈΠΌΠ΅ΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ (Π° ΠΌΠΎΠΆΠ΅Ρ ΠΈ Π½Π΅ Π±ΡΡΡ) Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌΡΠΌ.
ΠΠ΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π΄ΠΎΡΡΡΠΏΠ° - ΡΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ, ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΠΌΠΎΠ΅ ΠΏΠ°ΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΉ - Π³Π΅ΡΡΠ΅ΡΠΎΠΌ ΠΈ ΡΠ΅ΡΡΠ΅ΡΠΎΠΌ.
ΠΠ΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΌ-ΡΠΎ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΡΠΈΡ Π΄Π²ΡΡ ΡΠΈΠΏΠΎΠ². ΠΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΠ±ΠΎΠΈΠΌΠΈ.
Π Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π΄Π°Π½Π½ΡΡ , ΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π΄ΠΎΡΡΡΠΏΠ° ΡΠ²Π»ΡΡΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ. Π‘Π²ΠΎΠΉΡΡΠ²Π° configurable ΠΈ enumerable ΡΠ²Π»ΡΡΡΡΡ ΠΎΠ±ΡΠΈΠΌΠΈ Π΄Π»Ρ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° Π΄Π°Π½Π½ΡΡ ΠΈ Π΄Π»Ρ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° Π΄ΠΎΡΡΡΠΏΠ°, value ΠΈ writable ΠΎΡΠ½ΠΎΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΊ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ Π΄Π°Π½Π½ΡΡ , Π° get ΠΈ set - ΠΊ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ Π΄ΠΎΡΡΡΠΏΠ°. ΠΠ΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΠΎΠ±ΠΎΠΈΠΌ ΡΠΈΠΏΠ°ΠΌ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ.
Useful links:
5. Cookie, Storage
6. Constructor
Π€ΡΠ½ΠΊΡΠΈΠΈ-ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ ΡΠ²Π»ΡΡΡΡΡ ΠΎΠ±ΡΡΠ½ΡΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ. ΠΠΎ Π΅ΡΡΡ Π΄Π²Π° ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ:
ΠΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ-ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ Π±ΠΎΠ»ΡΡΠΎΠΉ Π±ΡΠΊΠ²Ρ.
Π€ΡΠ½ΠΊΡΠΈΡ-ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°
"new"
.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
ΠΠΎΠ³Π΄Π° ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ new User(...)
, ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
Π‘ΠΎΠ·Π΄Π°ΡΡΡΡ Π½ΠΎΠ²ΡΠΉ ΠΏΡΡΡΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΈ ΠΎΠ½ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΡΡΡ
this
.ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΊΠΎΠ΄ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠ±ΡΡΠ½ΠΎ ΠΎΠ½ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΠ΅Ρ
this
, Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΡΡΠ΄Π° Π½ΠΎΠ²ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π°.ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
this
.
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΏΠΎΡ ΠΎΠΆΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ².
7. Prototype
ΠΡΠ΅, ΠΊΡΠΎΠΌΠ΅ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΎΠ² - ΠΎΠ±ΡΠ΅ΠΊΡΡ, Ρ.Π΅. Π²ΡΠ΅ ΠΊΡΠΎΠΌΠ΅:
undefined
null
boolean
number
string
Symbol
ΠΠ°ΠΆΠ΄ΡΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠ²-Π²ΠΎ prototype. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠΌ, ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΡΠ»ΠΊΡ Π½Π° ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ prototype ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°. ΠΡΠ° ΡΡΡΠ»ΠΊΠ° Ρ ΡΠ°Π½ΠΈΡΡΡ Π² ΡΠ²ΠΎΠΉΡΡΠ²Π΅ __proto__. obj.toString() - ΡΡΡΠΎΠΊΠ°, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠ°Ρ ΠΎΠ±ΡΠ΅ΠΊΡ.
Promise / Async / Ajax / Fetch
Π’Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ ΡΠ»ΠΎΠΆΠ½ΠΎ ΡΠΈΡΠ°ΡΡ.
Π ΡΠ°ΠΊΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΡΠ»ΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠΎΡ ΡΠ°Π½ΡΡΡ Π΅Π³ΠΎ Β«ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎΒ».
ΠΠΎΠ΄ ΡΡΠ°Π» ΡΠΈΡΠ°ΡΡΡΡ ΡΠ²Π΅ΡΡ Ρ Π²Π½ΠΈΠ·, Π° Π½Π΅ ΡΠ»Π΅Π²Π° Π½Π°ΠΏΡΠ°Π²ΠΎ, ΠΊΠ°ΠΊ ΡΡΠΎ Π±ΡΠ»ΠΎ Π² ΡΠ»ΡΡΠ°Π΅ Ρ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΌΠΈ Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈ. ΠΡΠΎ ΠΏΠ»ΡΡ ΠΊ ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΠΈ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΈ Ρ ΠΏΡΠΎΠΌΠΈΡΠΎΠ² Π΅ΡΡΡ ΡΠ²ΠΎΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ:
ΠΡΡ Π΅ΡΡ Π½ΡΠΆΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΊΡΡΠ΅ΠΉ
.then
.ΠΠΌΠ΅ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ
try/catch
Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ.catch
Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π²ΡΠ΅Ρ ΠΎΡΠΈΠ±ΠΎΠΊ.Π Π°Π±ΠΎΡΠ° Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΏΡΠΎΠΌΠΈΡΠ°ΠΌΠΈ Π² ΡΠΈΠΊΠ»Π΅ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΠΈΠ½ΡΡΠΈΡΠΈΠ²Π½ΠΎ ΠΏΠΎΠ½ΡΡΠ½Π° ΠΈ ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΡΠ»ΠΎΠΆΠ½Π°.
Async/Await
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ async-ΡΡΠ½ΠΊΡΠΈΠΉ Π² ES2017 (ES8) ΡΠ΄Π΅Π»Π°Π»ΠΎ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΡΠΎΠΌΠΈΡΠ°ΠΌΠΈ Π»Π΅Π³ΡΠ΅.
ΠΠ°ΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ async-ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΠΎΠ²Π΅ΡΡ ΠΏΡΠΎΠΌΠΈΡΠΎΠ².
ΠΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈΠ°Π»ΡΠ½ΠΎ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡΠΌΠΈ.
Async-ΡΡΠ½ΠΊΡΠΈΠΈ Π±ΡΠ»ΠΈ Π·Π°Π΄ΡΠΌΠ°Π½Ρ ΠΊΠ°ΠΊ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° ΠΊΠΎΠ΄Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅ΠΌΡ ΠΏΡΠΎΠΌΠΈΡΡ.
ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ async/await, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΠΏΠΎΡΠ΅ΠΊ ΠΏΡΠΎΠΌΠΈΡΠΎΠ².
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ async-ΡΡΠ½ΠΊΡΠΈΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π±ΠΎΡΡ Ρ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ Π² ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠΌ ΡΡΠΈΠ»Π΅.
Π¦Π΅Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΉ async/await ΡΠΏΡΠΎΡΡΠΈΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ promises ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎ ΠΈ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π½Π°Π΄ Π³ΡΡΠΏΠΏΠΎΠΉ Promises
.
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π΄Π²ΡΡ
ΠΊΠ»ΡΡΠ΅Π²ΡΡ
ΡΠ»ΠΎΠ²: async
ΠΈ await
. ΠΠ΅ΡΠ²ΠΎΠ΅ Π΄Π΅Π»Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎΠΉ. ΠΠΌΠ΅Π½Π½ΠΎ Π² ΡΠ°ΠΊΠΈΡ
ΡΡΠ½ΠΊΡΠΈΡΡ
ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ await
. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ await
Π² Π»ΡΠ±ΠΎΠΌ Π΄ΡΡΠ³ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΡΠ·ΠΎΠ²Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ.
Async-ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠΎΡ ΠΎΠΆΠΈ Π½Π° ΠΎΠ±ΡΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π² JavaScript, Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π²Π΅ΡΠ΅ΠΉ:
Async-ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΠ΅Π³Π΄Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΏΡΠΎΠΌΠΈΡΡ
Π€ΡΠ½ΠΊΡΠΈΡ fn
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΡΠΎΠΊΡ 'hello'
. Π’. ΠΊ. ΡΡΠΎ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΎΠ±ΡΡΡΡΠ²Π°Π΅ΡΡΡ Π² ΠΏΡΠΎΠΌΠΈΡ (Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°).
ΠΠΎΠ΄ Π²ΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ ΠΈ Π±Π΅Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ async
:
Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π²ΠΌΠ΅ΡΡΠΎ async
, ΠΊΠΎΠ΄ Π²ΡΡΡΠ½ΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΏΡΠΎΠΌΠΈΡ.
Π§ΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, ΠΊΠΎΠ³Π΄Π° Π²Π½ΡΡΡΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΊΠ°ΠΊΠ°Ρ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΎΡΠΈΠ±ΠΊΠ°?
ΠΡΠ»ΠΈ ΠΎΡΠΈΠ±ΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π°, foo()
Π²Π΅ΡΠ½ΡΡ ΠΏΡΠΎΠΌΠΈΡ Ρ ΡΠ΅Π΄ΠΆΠ΅ΠΊΡΠΎΠΌ. Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΠΌΠ΅ΡΡΠΎ Promise.resolve
Π²Π΅ΡΠ½ΡΡΡΡ Promise.reject
, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΎΡΠΈΠ±ΠΊΡ.
ΠΡΠΈΠΌΠ΅Ρ 1
ΠΡΠ»ΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΠΌΠΈΡΠΎΠΌ, ΡΠΎ async-ΡΡΠ½ΠΊΡΠΈΡ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° Π΄ΠΎ ΡΠ΅Ρ
ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΏΡΠΎΠΌΠΈΡ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡ. ΠΡΠ»ΠΈ ΠΆΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΠΌΠΈΡΠΎΠΌ, ΡΠΎ ΠΎΠ½ΠΎ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΡΠ΅ΡΡΡ Π² ΠΏΡΠΎΠΌΠΈΡ ΡΠ΅ΡΠ΅Π· Promise.resolve
ΠΈ ΠΏΠΎΡΠΎΠΌ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ.
ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ fn
ΡΡΠ½ΠΊΡΠΈΡ?
ΠΠΎΡΠ»Π΅ Π²ΡΠ·ΠΎΠ²Π°
fn
ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠ΅ΡΠ²Π°Ρ ΡΡΡΠΎΠΊΠ° ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΡΠ΅ΡΡΡ ΠΈΠ·const a = await 9;
Π²const a = await Promise.resolve(9);
.ΠΠΎΡΠ»Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ
await
, Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠΈΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ, ΠΏΠΎΠΊΠ°a
Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡ ΡΠ²ΠΎΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ 9).delayAndGetRandom(1000)
ΠΏΡΠΈΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅fn
ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΠΎΠΊΠ° Π½Π΅ Π·Π°Π²Π΅ΡΡΠΈΡΡΡ ΡΠ°ΠΌΠ° (ΠΏΠΎΡΠ»Π΅ 1 ΡΠ΅ΠΊΡΠ½Π΄Ρ). ΠΡΠΎ, ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°ΡΡ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΎΠΉfn
ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° 1 ΡΠ΅ΠΊΡΠ½Π΄Ρ.Π’Π°ΠΊΠΆΠ΅
delayAndGetRandom(1000)
ΡΠ΅ΡΠ΅Π·resolve
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉb
.Π‘Π»ΡΡΠ°ΠΉ Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ
c
ΠΈΠ΄Π΅Π½ΡΠΈΡΠ΅Π½ ΡΠ»ΡΡΠ°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉa
. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΎΠΏΡΡΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΠ°ΡΠ·Π° Π½Π° 1 ΡΠ΅ΠΊΡΠ½Π΄Ρ, Π½ΠΎ ΡΠ΅ΠΏΠ΅ΡΡdelayAndGetRandom(1000)
Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ, Ρ. ΠΊ. ΡΡΠΎΠ³ΠΎ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ.ΠΠΎΠ΄ ΠΊΠΎΠ½Π΅Ρ ΡΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠΈΡΠ°ΡΡΡΡ ΠΏΠΎ ΡΠΎΡΠΌΡΠ»Π΅
a + b * c
. Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΠΎΠ±ΡΡΡΡΠ²Π°Π΅ΡΡΡ Π² ΠΏΡΠΎΠΌΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡPromise.resolve
ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ.
ΠΡΠΈΠΌΠ΅Ρ 2
ΠΠ΅ ΠΏΡΡΠ°ΠΉΡΠ΅ await ΠΈ Promise.all
Π€ΡΠ½ΠΊΡΠΈΡ add1
ΠΏΡΠΈΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π½Π° 2 ΡΠ΅ΠΊΡΠ½Π΄Ρ Π΄Π»Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ await
ΠΈ Π΅ΡΠ΅ Π½Π° 2 Π΄Π»Ρ Π²ΡΠΎΡΠΎΠ³ΠΎ. ΠΡΠΎΡΠΎΠΉ ΡΠ°ΠΉΠΌΠ΅Ρ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ. Π ΡΡΠ½ΠΊΡΠΈΠΈ add2
ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΠΎΠ±Π° ΠΈ ΠΎΠ±Π° ΠΆΠ΅ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΡΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ await
. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ add2
Π·Π°Π²Π΅ΡΡΠΈΡΡΡ ΡΠΊΠΎΡΠ΅Π΅ ΡΠ΅ΡΠ΅Π· Π΄Π²Π΅, ΡΠ΅ΠΌ ΡΠ΅ΡΠ΅Π· ΡΠ΅ΡΡΡΠ΅ ΡΠ΅ΠΊΡΠ½Π΄Ρ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ°ΠΉΠΌΠ΅ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ. ΠΠ΄Π½Π°ΠΊΠΎ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΎΠ½ΠΈ Π²ΡΠ΅ ΠΆΠ΅ Π½Π΅ ΠΏΠ°ΡΠ°Π»Π΅Π»Π»ΡΠ½ΠΎ, Π° Π΄ΡΡΠ³ Π·Π° Π΄ΡΡΠ³ΠΎΠΌ - ΡΠ°ΠΊΠ°Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ Π½Π΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Promise.all
. ΠΡΠ»ΠΈ Π΄Π²Π° ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Promise Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°Π·ΡΠ΅ΡΠ°ΡΡΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ, ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Promise.all
.
ΠΡΠΈΠΌΠ΅Ρ 3 (Ρ Π²ΡΠ±ΡΠ°ΡΡΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ)
ΠΠΎΠ³Π΄Π° ΡΡΠ½ΠΊΡΠΈΡ async
Π²ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
async
Π²ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅Useful links:
AJAX
ΡΡΠΎ ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ JavaScript ΠΈ XML. ΠΡΠΎ Π½Π°Π±ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π²Π΅Π±-ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ β ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π»ΡΠ±ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅. ΠΠΎΠ΄ AJAX ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΡΡ Π½Π΅ ΠΎΠ΄Π½Π° ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ, ΠΈ ΠΎΠ½Π° Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½ΠΎΠ²ΠΎΠΉ. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΡΠΎ Π³ΡΡΠΏΠΏΠ° ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ (HTML, CSS, Javascript, XML, ΠΈ Ρ.Π΄.), ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
AJAX Π·Π°ΠΏΡΠΎΡ, - ΡΡΠΎ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ Π·Π°Π΄Π°Ρ, Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ Β«Π·Π°ΠΏΡΠΎΡ-ΠΎΡΠ²Π΅ΡΒ».
XMLHttpRequest
β ΡΡΠΎ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ Π² Π±ΡΠ°ΡΠ·Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π΄Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄Π΅Π»Π°ΡΡ HTTP-Π·Π°ΠΏΡΠΎΡΡ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ Π±Π΅Π· ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΡΡΠ°Π½ΠΈΡΡ. ΠΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ Π½Π°Π±ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Π² ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°Ρ
HTTP ΠΈ HTTPS.
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° Π½Π°Π»ΠΈΡΠΈΠ΅ ΡΠ»ΠΎΠ²Π° Β«XMLΒ» Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ, XMLHttpRequest ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π»ΡΠ±ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ, Π° Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Ρ XML. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Π³ΡΡΠΆΠ°ΡΡ/ΡΠΊΠ°ΡΠΈΠ²Π°ΡΡ ΡΠ°ΠΉΠ»Ρ, ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ΅ΡΡ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅.
ΠΠ° ΡΠ΅Π³ΠΎΠ΄Π½ΡΡΠ½ΠΈΠΉ Π΄Π΅Π½Ρ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ XMLHttpRequest
, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄ΡΡΠ³ΠΎΠΉ, Π±ΠΎΠ»Π΅Π΅ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ fetch
.
Π ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π²Π΅Π±-ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ XMLHttpRequest
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΠΎ ΡΡΡΠΌ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ:
ΠΠΎ ΠΈΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ: ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅Π³ΠΎ
XMLHttpRequest
, ΠΊΠΎΡΠΎΡΡΠΉ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ.ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΡΠ°ΡΡΠ΅ Π±ΡΠ°ΡΠ·Π΅ΡΡ ΠΈ Π½Π΅ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»ΠΈΡΠΈΠ»Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎΠ±Ρ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΠ΄Π°).
ΠΠΎΡΡΠ΅Π±Π½ΠΎΡΡΡ Π² ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΡ
fetch
ΠΏΠΎΠΊΠ° ΡΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ, ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ, ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ΅ΡΡΠ° ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ.
XMLHttpRequest ΠΈΠΌΠ΅Π΅Ρ Π΄Π²Π° ΡΠ΅ΠΆΠΈΠΌΠ° ΡΠ°Π±ΠΎΡΡ: ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ ΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½.
Π§ΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π·Π°ΠΏΡΠΎΡ, Π½ΡΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΡΠΈ ΡΠ°Π³Π°:
Π‘ΠΎΠ·Π΄Π°ΡΡ
XMLHttpRequest
.xhr β ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ° Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΡΠ΄Π΅Ρ Ρ ΡΠ°Π½ΠΈΡΡΡ, - ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° XMLHttpRequest, ΠΎΠ±ΡΠ΅ΠΊΡ Ρ Π½Π°Π±ΠΎΡΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ².
ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ.
ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΎΠ±ΡΡΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅
new XMLHttpRequest
. Π Π½Π΅Π³ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π·Π°ΠΏΡΠΎΡΠ°:method
β HTTP-ΠΌΠ΅ΡΠΎΠ΄. ΠΠ±ΡΡΠ½ΠΎ ΡΡΠΎ"GET"
ΠΈΠ»ΠΈ"POST"
.async
β Π΅ΡΠ»ΠΈ ΡΠΊΠ°Π·Π°ΡΡfalse
, ΡΠΎΠ³Π΄Π° Π·Π°ΠΏΡΠΎΡ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ, ΡΡΠΎ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΡΡΡ ΠΏΠΎΠ·ΠΆΠ΅.user
,password
β Π»ΠΎΠ³ΠΈΠ½ ΠΈ ΠΏΠ°ΡΠΎΠ»Ρ Π΄Π»Ρ Π±Π°Π·ΠΎΠ²ΠΎΠΉ HTTP-Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ (Π΅ΡΠ»ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ).
ΠΠ°ΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ Π²ΡΠ·ΠΎΠ²
open
, Π²ΠΎΠΏΡΠ΅ΠΊΠΈ ΡΠ²ΠΎΠ΅ΠΌΡ Π½Π°Π·Π²Π°Π½ΠΈΡ, Π½Π΅ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅. ΠΠ½ Π»ΠΈΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΡΠ΅Ρ Π·Π°ΠΏΡΠΎΡ, Π½ΠΎ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΎΡΡΡΠ»Π°Π΅ΡΡΡ Π·Π°ΠΏΡΠΎΡ ΡΠΎΠ»ΡΠΊΠΎ Π»ΠΈΡΡ ΠΏΠΎΡΠ»Π΅ Π²ΡΠ·ΠΎΠ²Π°send
.ΠΠΎΡΠ»Π°ΡΡ Π·Π°ΠΏΡΠΎΡ.
ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΡΡΡΠ»Π°Π΅Ρ Π·Π°ΠΏΡΠΎΡ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ. ΠΠ΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ
body
ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠ΅Π»ΠΎ Π·Π°ΠΏΡΠΎΡΠ°.Π‘Π»ΡΡΠ°ΡΡ ΡΠΎΠ±ΡΡΠΈΡ Π½Π°
xhr
, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΡΠ²Π΅Ρ.Π’ΡΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΠΎΠ±ΡΡΠΈΡ:
load
β ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΡΠ΅Π½ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΎΡΠ²Π΅Ρ, Π²ΠΊΠ»ΡΡΠ°Ρ ΠΎΡΠ²Π΅ΡΡ Ρ HTTP-ΠΎΡΠΈΠ±ΠΊΠΎΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ 404.error
β ΠΊΠΎΠ³Π΄Π° Π·Π°ΠΏΡΠΎΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π½Π΅Π²Π°Π»ΠΈΠ΄Π½ΡΠΉ URL.progress
β ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΎΡΠ²Π΅ΡΠ°, ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ ΠΎ ΠΏΡΠΎΠ³ΡΠ΅ΡΡΠ΅.
ΠΠΎΠ»Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ. ΠΠΎΠ΄ Π½ΠΈΠΆΠ΅ Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ /article/xmlhttprequest/example/load
Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ ΠΎ ΠΏΡΠΎΠ³ΡΠ΅ΡΡΠ΅:
ΠΠ°ΠΆΠ΄ΡΠΉ ΠΎΡΠ²Π΅Ρ ΠΎΡ ΡΠ΅ΡΠ²Π΅ΡΠ° Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π·Π°ΠΏΡΠΎΡΠ° Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΡ
ΡΠ²ΠΎΠΉΡΡΠ²Π°Ρ
xhr
:status
ΠΠΎΠ΄ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ HTTP (ΡΠΈΡΠ»ΠΎ): 200
, 404
, 403
ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ 0
Π² ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΎΡΠΈΠ±ΠΊΠ° Π½Π΅ ΡΠ²ΡΠ·Π°Π½Π° Ρ HTTP.
statusText
Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΎΡΠ²Π΅ΡΠ° HTTP (ΡΡΡΠΎΠΊΠ°): ΠΎΠ±ΡΡΠ½ΠΎ OK
Π΄Π»Ρ 200
, Not Found
Π΄Π»Ρ 404
, Forbidden
Π΄Π»Ρ 403
, ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅.
response
(Π² ΡΡΠ°ΡΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΡΡΠ΅ΡΠ°ΡΡΡΡ ΠΊΠ°ΠΊ responseText
)Π’Π΅Π»ΠΎ ΠΎΡΠ²Π΅ΡΠ° ΡΠ΅ΡΠ²Π΅ΡΠ°, Π΄Π°Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ΄ΡΡ ΠΎΡ ΡΠ΅ΡΠ²Π΅ΡΠ° Π² Π²ΠΈΠ΄Π΅ ΡΡΡΠΎΠΊΠΈ
Π’ΠΈΠΏ ΠΎΡΠ²Π΅ΡΠ°:
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ xhr.responseType
, ΡΡΠΎΠ±Ρ ΡΠΊΠ°Π·Π°ΡΡ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡΠΉ ΡΠΈΠΏ ΠΎΡΠ²Π΅ΡΠ°:
""
(ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ) β ΡΡΡΠΎΠΊΠ°,"text"
β ΡΡΡΠΎΠΊΠ°,"document"
β XML-Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ (ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ XPath ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ XML-ΠΌΠ΅ΡΠΎΠ΄Ρ),"json"
β JSON (ΠΏΠ°ΡΡΠΈΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ).
Π ΠΏΡΠΈΠΌΠ΅ΡΡ, Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΎΡΠ²Π΅Ρ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ JSON:
Π‘ΠΎΡΡΠΎΡΠ½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠ°:
Π£ XMLHttpRequest
Π΅ΡΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ(ΡΡΠ°ΡΡΡΡ HTTP-Π·Π°ΠΏΡΠΎΡΠ°), ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠ΅Π½ΡΡΡΡΡ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠ°. Π’Π΅ΠΊΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π² ΡΠ²ΠΎΠΉΡΡΠ²Π΅ xhr.readyState
.
Π‘ΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° XMLHttpRequest
ΠΌΠ΅Π½ΡΡΡΡΡ Π² ΡΠ°ΠΊΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅: 0
β 1
β 2
β 3
β β¦ β 3
β 4
. Π‘ΠΎΡΡΠΎΡΠ½ΠΈΠ΅ 3
ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΡΠ΅Π½Π° ΡΠ°ΡΡΡ Π΄Π°Π½Π½ΡΡ
.
onreadystatechange β ΡΡΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ»ΡΡΠΈΡΡΡ ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ ΠΏΡΠΈΠ΄Π΅Ρ ΠΎΡΠ²Π΅Ρ ΠΎΡ ΡΠ΅ΡΠ²Π΅ΡΠ°.
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π·Π°ΠΏΡΠΎΡΠ° Π³Π΅Π½Π΅ΡΠΈΡΡΡΡ ΡΠΎΠ±ΡΡΠΈΠ΅ readystatechange
:
COMET
ΠΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ AJAX β ΡΡΠΎ Β«ΠΎΡΠΏΡΠ°Π²ΠΈΠ» Π·Π°ΠΏΡΠΎΡ β ΠΏΠΎΠ»ΡΡΠΈΠ» ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΒ», Π° COMET β ΡΡΠΎ Β«Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΡΠΉ ΠΊΠ°Π½Π°Π», ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΡΠΈΡ ΠΎΠ΄ΡΡ Π΄Π°Π½Π½ΡΠ΅Β».
ΠΡΠΈΠΌΠ΅ΡΡ COMET-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ:
Π§Π°Ρ β ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ ΡΠΈΠ΄ΠΈΡ ΠΈ ΡΠΌΠΎΡΡΠΈΡ, ΡΡΠΎ ΠΏΠΈΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅. ΠΡΠΈ ΡΡΠΎΠΌ Π½ΠΎΠ²ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΏΡΠΈΡ ΠΎΠ΄ΡΡ Β«ΡΠ°ΠΌΠΈ ΠΏΠΎ ΡΠ΅Π±Π΅Β», ΠΎΠ½ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°ΠΆΠΈΠΌΠ°ΡΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ Π΄Π»Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΎΠΊΠ½Π° ΡΠ°ΡΠ°.
ΠΡΠΊΡΠΈΠΎΠ½ β ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ ΡΠΌΠΎΡΡΠΈΡ Π½Π° ΡΠΊΡΠ°Π½ ΠΈ Π²ΠΈΠ΄ΠΈΡ, ΠΊΠ°ΠΊ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΠΊΡΡΠ°Ρ ΡΡΠ°Π²ΠΊΠ° Π·Π° ΡΠΎΠ²Π°Ρ.
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ β ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄ΠΈΠ½ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ, Π΄ΡΡΠ³ΠΈΠ΅ Π²ΠΈΠ΄ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΡΡΠΎΠΌ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠ΅ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° ΡΠ΅Π΄Π°ΠΊΡΠΎΡΡ Π²ΠΈΠ΄ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΄ΡΡΠ³ Π΄ΡΡΠ³Π°.
COMET-ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅ Π±Π΅Π· ΡΡΠ°ΡΡΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
ΠΠ° ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ COMET ΡΠ΄ΠΎΠ±Π½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ Π²ΠΎ Π²ΡΠ΅Ρ Π±ΡΠ°ΡΠ·Π΅ΡΠ°Ρ .
Fetch
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° fetch
:
url
β URL, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΄Π΅Π»Π°ΡΡ Π·Π°ΠΏΡΠΎΡ,options
β Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ Π·Π°ΠΏΡΠΎΡΠ°.
ΠΠ΅Π· options
ΡΡΠΎ ΠΏΡΠΎΡΡΠΎΠΉ GET-Π·Π°ΠΏΡΠΎΡ, ΡΠΊΠ°ΡΠΈΠ²Π°ΡΡΠΈΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ url
.
ΠΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ fetch
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΠ ΠΠΠΠ‘, ΠΊΠΎΡΠΎΡΡΠΉ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΡΠ΅Π½ ΠΎΡΠ²Π΅Ρ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΊΠΎΠ»Π»Π±ΡΠΊΠΈ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ Response ΠΈΠ»ΠΈ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ, Π΅ΡΠ»ΠΈ Π·Π°ΠΏΡΠΎΡ Π½Π΅ ΡΠ΄Π°Π»ΡΡ.
ΠΡΠΎΡΠ΅ΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΡΠ²Π΅ΡΠ° ΠΎΠ±ΡΡΠ½ΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² Π΄Π²Π° ΡΡΠ°ΠΏΠ°.
ΠΠ° ΡΡΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΡΠ°ΡΡΡ HTTP-Π·Π°ΠΏΡΠΎΡΠ° ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, Π²ΡΠΏΠΎΠ»Π½ΠΈΠ»ΡΡ Π»ΠΈ ΠΎΠ½ ΡΡΠΏΠ΅ΡΠ½ΠΎ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, Π½ΠΎ ΠΏΠΎΠΊΠ° Π±Π΅Π· ΡΠ΅Π»Π° ΠΎΡΠ²Π΅ΡΠ°.
ΠΡΠΎΠΌΠΈΡ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ, Π΅ΡΠ»ΠΈ fetch
Π½Π΅ ΡΠΌΠΎΠ³ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ HTTP-Π·Π°ΠΏΡΠΎΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΈ ΠΎΡΠΈΠ±ΠΊΠ΅ ΡΠ΅ΡΠΈ ΠΈΠ»ΠΈ Π΅ΡΠ»ΠΈ Π½Π΅Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠ°ΠΉΡΠ°. HTTP-ΡΡΠ°ΡΡΡΡ 404 ΠΈ 500 Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ.
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ²ΠΈΠ΄Π΅ΡΡ HTTP-ΡΡΠ°ΡΡΡ Π² ΡΠ²ΠΎΠΉΡΡΠ²Π°Ρ ΠΎΡΠ²Π΅ΡΠ°:
status
β ΠΊΠΎΠ΄ ΡΡΠ°ΡΡΡΠ° HTTP-Π·Π°ΠΏΡΠΎΡΠ°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ 200.ok
β Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅: Π±ΡΠ΄Π΅Ρtrue
, Π΅ΡΠ»ΠΈ ΠΊΠΎΠ΄ HTTP-ΡΡΠ°ΡΡΡΠ° Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ 200-299.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
ΠΠΎ-Π²ΡΠΎΡΡΡ , Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ΅Π»Π° ΠΎΡΠ²Π΅ΡΠ° Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Π°.
Response
ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΡ
Π½Π° ΠΏΡΠΎΠΌΠΈΡΠ°Ρ
, Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ΅Π»Ρ ΠΎΡΠ²Π΅ΡΠ° Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
ΡΠΎΡΠΌΠ°ΡΠ°Ρ
:
response.text()
β ΡΠΈΡΠ°Π΅Ρ ΠΎΡΠ²Π΅Ρ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΡΠΉ ΡΠ΅ΠΊΡΡ,response.json()
β Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΡΠ΅Ρ ΠΎΡΠ²Π΅Ρ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ JSON,
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠ»ΡΡΠΈΠΌ JSON-ΠΎΠ±ΡΠ΅ΠΊΡ Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌΠΈ ΠΊΠΎΠΌΠΌΠΈΡΠ°ΠΌΠΈ ΠΈΠ· ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Π½Π° GitHub:
Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ Π±Π΅Π· await
, Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΠΌΠΈΡΠΎΠ²:
ΠΡΠΈΠΌΠ΅Ρ Π±Π΅Π· await:
ΠΠ±ΡΠ΅ΠΊΡ response
ΠΊΡΠΎΠΌΠ΅ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌ headers
, ΡΡΠ°ΡΡΡΡ status
ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΠΎΠ»ΡΠΌ ΠΎΡΠ²Π΅ΡΠ°, Π΄Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ Π΅Π³ΠΎ ΡΠ΅Π»ΠΎ, Π² ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅, ΡΡΠΎ Π±ΡΠ»ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π²ΡΡΠ΅.
ΠΡΠΎΠ³ΠΎ:
Π’ΠΈΠΏΠΈΡΠ½ΡΠΉ Π·Π°ΠΏΡΠΎΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ fetch
ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π΄Π²ΡΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² await
:
ΠΠ»ΠΈ, Π±Π΅Π· await
:
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΎΡΠ²Π΅ΡΠ°:
response.status
β HTTP-ΠΊΠΎΠ΄ ΠΎΡΠ²Π΅ΡΠ°,response.ok
βtrue
, Π΅ΡΠ»ΠΈ ΡΡΠ°ΡΡΡ ΠΎΡΠ²Π΅ΡΠ° Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ 200-299.response.headers
β ΠΏΠΎΡ ΠΎΠΆΠΈΠΉ Π½Π°Map
ΠΎΠ±ΡΠ΅ΠΊΡ Ρ HTTP-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ.
Useful links:
Framework vs library
Π€ΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ - ΡΡΠΎ Π½Π°Π±ΠΎΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ². ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° - ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ ΡΠ·ΡΠΊΠ΅.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° - ΡΡΠΎ ΡΠ±ΠΎΡΠΊΠ° ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΉ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΠ΅Π½Π° ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΠΎΡΠΎΠΌ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ . ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΠΈΠ΄Π΅Ρ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ΠΈ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
Π€ΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ - ΡΡΠΎ ΠΊΠ°ΡΠΊΠ°Ρ Π΄Π»Ρ Π±ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΎΠ±ΡΠ°Π½Ρ Π²ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π΅ΡΠ°Π»ΠΈ: Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΡΡΡΡΠΊΡΡΡΠ°, Π½Π°ΡΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄ ΠΈ Ρ.Π΄. ΠΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½Π°Ρ Π·Π°Π³ΠΎΡΠΎΠ²ΠΊΠ°, Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΡ Π±ΡΠ΄Π΅ΡΠ΅ Π΄ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» ΠΈ ΡΡΡΠΎΠΈΡΡ Π΄Π°Π»ΡΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΠ°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π·Π° ΡΡΠ΅Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΠΆΠ΅ Π΅ΡΡΡ ΠΈ Π·Π°Π±ΠΎΡΠ»ΠΈΠ²ΠΎ Π΄Π»Ρ ΠΠ°Ρ Π·Π°Π³ΠΎΡΠΎΠ²Π»Π΅Π½ΠΎ.
Π€ΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ β Π΅Π³ΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Π½Π΅ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π²Π°ΠΌΠΈ, Π° Π½Π°ΠΎΠ±ΠΎΡΠΎΡ, Π²Π°Ρ ΠΊΠΎΠ΄ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΈΠ· Π½Π΅Π³ΠΎ.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° β ΡΡΠΎ Π³ΠΎΡΠΎΠ²ΡΠΉ ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π½Π°Π±ΠΎΡ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ Π±Π΅ΠΆΠΈΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΈ ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ. Π’ΠΎ Π΅ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ΡΠ°ΡΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
API - ΡΡΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ ΠΈΠ·Π²Π½Π΅. Π£ ΠΠ°Ρ Π΅ΡΡΡ ΡΠ°ΠΌ ΠΏΠΎ ΡΠ΅Π±Π΅ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ Π³ΠΎΡΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ΄ΡΠΊΡ ΠΈ ΠΎΠ½ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ½ΡΠΌ ΡΡΠΈΠΊΠΎΠΌ ΠΈ ΠΡ Ρ ΠΎΡΠΈΡΠ΅, ΡΡΠΎ Π±Ρ ΠΈΠΌ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ Π½ΠΈΠΌ ΠΈ ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΡΠ΅ ΠΈΡ , Π° ΡΡΠΎΡΠΎΠ½Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈΠΌ ΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ. ΠΡΠΎ ΡΠ°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ: Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ ΠΊΠΎΠ΄Ρ Π²Π½Π΅ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΡΠΎ Π½Π°Π±ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π·Π°ΡΡΠ°Π²ΠΈΡΡ Π²Π½Π΅ΡΠ½ΡΡ Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΡΡΠ½ΠΎΡΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ.
Linked list
Big O
ES2015
CoreHTML
CoreCSS (flexbox, positioning)
CoreJS
Design patterns
Architectural Patterns []
FE optimization / Performance
DOM/BOM
Agile/SCRUM
tasks
reduce, filter, map, forEach, DOM traversing
Last updated
Was this helpful?