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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π’Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ JavaScriptΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 19

Автор ΠœΠ°Ρ€Π΅ΠΉΠ½ Π₯Π°Π²Π΅Ρ€Π±Π΅ΠΊΠ΅

Π˜Ρ‚ΠΎΠ³

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ функциям – Π½Π΅ просто ΠΈΠ³Ρ€ΡƒΡˆΠΊΠ°, Π½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ свойство JavaScript. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ выраТСния «с ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈΒ» Π² Π½ΠΈΡ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Ρ‚Π΅ΠΌ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… функциями.

Π£ массивов Π΅ΡΡ‚ΡŒ нСсколько ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка – forEach, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ элСмСнтом, filter – Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ массив, Π³Π΄Π΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ значСния ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Π½Ρ‹, map – Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ массив, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½ Ρ‡Π΅Ρ€Π΅Π· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, reduce – для ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ всСх элСмСнтов массива Π² ΠΎΠ΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π£ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ apply для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² Π²ΠΈΠ΄Π΅ массива. Π’Π°ΠΊΠΆΠ΅ Ρƒ Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ bind для создания ΠΊΠΎΠΏΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с частично Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ.

УпраТнСния

Π‘Π²Ρ‘Ρ€Ρ‚ΠΊΠ°

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ reduce Π² ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ с concat для свёртки массива массивов Π² ΠΎΠ΄ΠΈΠ½ массив, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΅ΡΡ‚ΡŒ всС элСмСнты Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… массивов.

var arrays = [[1, 2, 3], [4, 5], [6]];

// Π’Π°Ρˆ ΠΊΠΎΠ΄ Ρ‚ΡƒΡ‚

// β†’ [1, 2, 3, 4, 5, 6]

Π Π°Π·Π½ΠΈΡ†Π° Π² возрастС ΠΌΠ°Ρ‚Π΅Ρ€Π΅ΠΉ ΠΈ ΠΈΡ… Π΄Π΅Ρ‚Π΅ΠΉ

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π½Π°Π±ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, подсчитайтС ΡΡ€Π΅Π΄Π½ΡŽΡŽ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ Π² возрастС ΠΌΠ΅ΠΆΠ΄Ρƒ матСрями ΠΈ ΠΈΡ… Π΄Π΅Ρ‚ΡŒΠΌΠΈ (это возраст ΠΌΠ°Ρ‚Π΅Ρ€ΠΈ Π²ΠΎ врСмя появлСния Ρ€Π΅Π±Ρ‘Π½ΠΊΠ°). МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ average, ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΡƒΡŽ Π² Π³Π»Π°Π²Π΅.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ – Π½Π΅ всС ΠΌΠ°Ρ‚Π΅Ρ€ΠΈ, упомянутыС Π² Π½Π°Π±ΠΎΡ€Π΅, ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π² Π½Ρ‘ΠΌ. Π—Π΄Π΅ΡΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ byName, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ поиска ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ.

function average(array) {

  function plus(a, b) { return a + b; }

  return array.reduce(plus) / array.length;

}


var byName = {};

ancestry.forEach(function(person) {

  byName[person.name] = person;

});


// Π’Π°Ρˆ ΠΊΠΎΠ΄ Ρ‚ΡƒΡ‚


// β†’ 31.2

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ‡Π΅ΡΠΊΠ°Ρ оТидаСмая ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΆΠΈΠ·Π½ΠΈ

ΠœΡ‹ считали, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послСднСС ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠ΅ людСй Π΄ΠΎΠΆΠΈΠ»ΠΎ Π΄ΠΎ 90 Π»Π΅Ρ‚. Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим этот Ρ„Π΅Π½ΠΎΠΌΠ΅Π½ ΠΏΠΎΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅. ΠŸΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ срСдний возраст людСй для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· столСтий. НазначаСм ΡΡ‚ΠΎΠ»Π΅Ρ‚ΠΈΡŽ людСй, бСря ΠΈΡ… Π³ΠΎΠ΄ смСрти, дСля Π΅Π³ΠΎ Π½Π° 100 ΠΈ округляя: Math.ceil(person.died / 100).

function average(array) {

  function plus(a, b) { return a + b; }

  return array.reduce(plus) / array.length;

}


// Π’ΡƒΡ‚ ваш ΠΊΠΎΠ΄


// β†’ 16: 43.5

//   17: 51.2

//   18: 52.8

//   19: 54.8

//   20: 84.7

//   21: 94

Π’ качСствС ΠΏΡ€ΠΈΠ·ΠΎΠ²ΠΎΠΉ ΠΈΠ³Ρ€Ρ‹ Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ groupBy, Π°Π±ΡΡ‚Ρ€Π°Π³ΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ. Она Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ массив ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая вычисляСт Π³Ρ€ΡƒΠΏΠΏΡƒ для элСмСнтов массива, ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сопоставляСт названия Π³Ρ€ΡƒΠΏΠΏ массивам Ρ‡Π»Π΅Π½ΠΎΠ² этих Π³Ρ€ΡƒΠΏΠΏ.

Every ΠΈ some

Π£ массивов Π΅ΡΡ‚ΡŒ Π΅Ρ‰Ρ‘ стандартныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ every ΠΈ some. Они ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π½Π΅ΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая, Π±ΡƒΠ΄ΡƒΡ‡ΠΈ Π²Ρ‹Π·Π²Π°Π½Π½ΠΎΠΉ с элСмСнтом массива Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true ΠΈΠ»ΠΈ false. Π’Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ && Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли выраТСния с ΠΎΠ±Π΅ΠΈΡ… сторон ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ true, ΠΌΠ΅Ρ‚ΠΎΠ΄ every Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true, ΠΊΠΎΠ³Π΄Π° функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true для всСх элСмСнтов массива. БоотвСтствСнно, some Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true, ΠΊΠΎΠ³Π΄Π° заданная функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ хотя Π±Ρ‹ с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· элСмСнтов массива. Они Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ большС элСмСнтов, Ρ‡Π΅ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ – Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли some ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ true для ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта, ΠΎΠ½ Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ.

ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ every ΠΈ some, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ массив Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°.

// Π’Π°Ρˆ ΠΊΠΎΠ΄ Ρ‚ΡƒΡ‚


console.log(every([NaN, NaN, NaN], isNaN));

// β†’ true

console.log(every([NaN, NaN, 4], isNaN));

// β†’ false

console.log(some([NaN, 3, 4], isNaN));

// β†’ true

console.log(some([2, 3, 4], isNaN));

// β†’ false

6. Π’айная Тизнь ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языков Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Ρ‚Π°Ρ‰Π°Ρ‚ с собой всё своё нСявноС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅. Π’Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ Π±Ρ‹Π» Π±Π°Π½Π°Π½ – Π° Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ Π³ΠΎΡ€ΠΈΠ»Π»Ρƒ с Π±Π°Π½Π°Π½ΠΎΠΌ, ΠΈ Ρ†Π΅Π»Ρ‹Π΅ Π΄ΠΆΡƒΠ½Π³Π»ΠΈ Π²ΠΏΡ€ΠΈΠ΄Π°Ρ‡Ρƒ.

Π”ΠΆΠΎ Армстронг, Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽ Coders at Work

Π’Π΅Ρ€ΠΌΠΈΠ½ Β«ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Β» Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ сильно ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½ значСниями. Π’ ΠΌΠΎΠ΅ΠΉ профСссии ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ – ΡΡ‚ΠΈΠ»ΡŒ ΠΆΠΈΠ·Π½ΠΈ, Ρ‚Π΅ΠΌΠ° свящСнных Π²ΠΎΠΉΠ½ ΠΈ любимоС Π·Π°ΠΊΠ»ΠΈΠ½Π°Π½ΠΈΠ΅, Π½Π΅ Ρ‚Π΅Ρ€ΡΡŽΡ‰Π΅Π΅ своСй магичСской силы.

Π‘Ρ‚ΠΎΡ€ΠΎΠ½Π½Π΅ΠΌΡƒ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΡƒ всё это нСпонятно. Начнём ΠΆΠ΅ с ΠΊΡ€Π°Ρ‚ΠΊΠΎΠΉ истории ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΊΠ°ΠΊ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ.

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ

Π­Ρ‚Π° история, ΠΊΠ°ΠΊ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ историй ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, начинаСтся с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ слоТности. Одна ΠΈΠ· ΠΈΠ΄Π΅ΠΉ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ управляСмой, Ρ€Π°Π·Π΄Π΅Π»ΠΈΠ² Π΅Ρ‘ Π½Π° нСбольшиС части, ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°. Π­Ρ‚ΠΈ части стали Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ – твёрдая скорлупа, ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π°Ρ Π»ΠΈΠΏΠΊΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ, ΠΈ вмСсто Π½Π΅Ρ‘ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‰Π°Ρ Π½Π°ΠΌ нСсколько Ρ€ΡƒΡ‡Π΅ΠΊ настройки ΠΈ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠ² (Π²Ρ€ΠΎΠ΄Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²), ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… интСрфСйс, посрСдством ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. ИдСя Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ интСрфСйс ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ прост, ΠΈ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π½ΠΈΠΌ позволяСт ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС слоТныС процСссы, происходящиС Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ интСрфСйс ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΏΡ€ΡΡ‚Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ слоТного.



Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ интСрфСйс ΠΊ участку экрана. Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ ΠΈΠ»ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ тСкст Π½Π° этот участок, Π½ΠΎ ΠΏΡ€ΠΈ этом всС Π΄Π΅Ρ‚Π°Π»ΠΈ, ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ прСвращСния тСкста ΠΈΠ»ΠΈ Ρ„ΠΈΠ³ΡƒΡ€ Π² пиксСли, скрыты. Π£ вас Π΅ΡΡ‚ΡŒ Π½Π°Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ drawCircle, ΠΈ это всё, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ для использования Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Π’Π°ΠΊΠΈΠ΅ ΠΈΠ΄Π΅ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ Π² 70-80 Π³ΠΎΠ΄Π°Ρ…, Π° Π² 90-Ρ… ΠΈΡ… вынСсла Π½Π° ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ рСкламная Π²ΠΎΠ»Π½Π° – Ρ€Π΅Π²ΠΎΠ»ΡŽΡ†ΠΈΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования. Π’Π½Π΅Π·Π°ΠΏΠ½ΠΎ большой ΠΊΠ»Π°Π½ людСй объявил, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ – это ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ способ программирования. А всё, Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², являСтся ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅ΠΉ Π΅Ρ€ΡƒΠ½Π΄ΠΎΠΉ.

Π’Π°ΠΊΠΎΠΉ Ρ„Π°Π½Π°Ρ‚ΠΈΠ·ΠΌ всСгда ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΊΡƒΡ‡Π΅ бСсполСзной Ρ‡ΡƒΡˆΠΈ, ΠΈ с Ρ‚Π΅Ρ… ΠΏΠΎΡ€ ΠΈΠ΄Ρ‘Ρ‚ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ ΠΊΠΎΠ½Ρ‚Ρ€Ρ€Π΅Π²ΠΎΠ»ΡŽΡ†ΠΈΠΈ. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΡ€ΡƒΠ³Π°Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΊΡ€Π°ΠΉΠ½Π΅ ΠΏΠ»ΠΎΡ…ΡƒΡŽ Ρ€Π΅ΠΏΡƒΡ‚Π°Ρ†ΠΈΡŽ.

Π― ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ… с практичСской, Π° Π½Π΅ идСологичСской Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния. Π•ΡΡ‚ΡŒ нСсколько ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΈΠ΄Π΅ΠΉ, Π² частности инкапсуляция (Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈ внСшнСй простотой), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ популяризованы ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΊΡƒΠ»ΡŒΡ‚ΡƒΡ€ΠΎΠΉ. Π˜Ρ… стоит ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ.

Π­Ρ‚Π° Π³Π»Π°Π²Π° описываСт довольно эксцСнтричный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ JavaScript ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ, ΠΈ Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ соотносятся с классичСскими ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ°ΠΌΠΈ.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ – свойства, содСрТащиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄:

var rabbit = {};

rabbit.speak = function(line) {

  console.log("ΠšΡ€ΠΎΠ»ΠΈΠΊ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ '" + line + "'");

};


rabbit.speak("Π― ΠΆΠΈΠ²ΠΎΠΉ.");

// β†’ ΠšΡ€ΠΎΠ»ΠΈΠΊ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ 'Π― ΠΆΠΈΠ²ΠΎΠΉ.'

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½ Π±Ρ‹Π» Π²Ρ‹Π·Π²Π°Π½. Когда Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° – ΠΊΠ°ΠΊ свойство ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ object.method() – ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ пСрСмСнная Π² Π΅Ρ‘ Ρ‚Π΅Π»Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Π²Ρ‹Π·Π²Π°Π²ΡˆΠΈΠΉ Π΅Ρ‘ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

function speak(line) {

  console.log("А " + this.type + " ΠΊΡ€ΠΎΠ»ΠΈΠΊ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ '" + line + "'");

}

var whiteRabbit = {type: "Π±Π΅Π»Ρ‹ΠΉ", speak: speak};

var fatRabbit = {type: "толстый", speak: speak};


whiteRabbit.speak("Ушки ΠΌΠΎΠΈ ΠΈ усики, я ΠΆΠ΅ навСрняка ΠΎΠΏΠ°Π·Π΄Ρ‹Π²Π°ΡŽ!");

// β†’ А Π±Π΅Π»Ρ‹ΠΉ ΠΊΡ€ΠΎΠ»ΠΈΠΊ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ 'Ушки ΠΌΠΎΠΈ ΠΈ усики, я ΠΆΠ΅ навСрняка ΠΎΠΏΠ°Π·Π΄Ρ‹Π²Π°ΡŽ!'

fatRabbit.speak("МнС Π±Ρ‹ сСйчас ΠΌΠΎΡ€ΠΊΠΎΠ²ΠΎΡ‡ΠΊΠΈ.");

// β†’ А толстый ΠΊΡ€ΠΎΠ»ΠΈΠΊ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ 'МнС Π±Ρ‹ сСйчас ΠΌΠΎΡ€ΠΊΠΎΠ²ΠΎΡ‡ΠΊΠΈ.'

Код ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово this для Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚ΠΈΠΏΠ° говорящСго ΠΊΡ€ΠΎΠ»ΠΈΠΊΠ°.

ВспомнитС, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ apply ΠΈ bind ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для эмуляции Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Π­Ρ‚ΠΎΡ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΊΠ°ΠΊ Ρ€Π°Π· Π΄Π°Ρ‘Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ this.

Π•ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ Π½Π° apply, ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ call. Он Ρ‚ΠΎΠΆΠ΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ являСтся, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, Π° Π½Π΅ Π² Π²ΠΈΠ΄Π΅ массива. Как apply ΠΈ bind, Π² call ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ this.

speak.apply(fatRabbit, ["ΠžΡ‚Ρ€Ρ‹ΠΆΠΊΠ°!"]);

// β†’ А толстый ΠΊΡ€ΠΎΠ»ΠΈΠΊ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ 'ΠžΡ‚Ρ€Ρ‹ΠΆΠΊΠ°!'

speak.call({type: "старый"}, "О, господи.");

// β†’ А старый ΠΊΡ€ΠΎΠ»ΠΈΠΊ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ 'О, господи.'

ΠŸΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡ‹

Π‘Π»Π΅Π΄ΠΈΡ‚Π΅ Π·Π° Ρ€ΡƒΠΊΠ°ΠΌΠΈ.

var empty = {};

console.log(empty.toString);

// β†’ function toString(){…}

console.log(empty.toString());

// β†’ [object Object]

Π― достал свойство пустого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Магия!

Ну, Π½Π΅ магия, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ. Π― просто Π½Π΅ всё рассказал ΠΏΡ€ΠΎ Ρ‚ΠΎ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² JavaScript. Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ Π½Π°Π±ΠΎΡ€Ρƒ свойств, ΠΏΠΎΡ‡Ρ‚ΠΈ Ρƒ всСх Ρ‚Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ. ΠŸΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ – это Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ запасной источник свойств. Когда ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ запрос Π½Π° свойство, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρƒ Π½Π΅Π³ΠΎ Π½Π΅Ρ‚, это свойство ищСтся Ρƒ Π΅Π³ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ°, Π·Π°Ρ‚Π΅ΠΌ Ρƒ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ°, ΠΈ Ρ‚. Π΄.