Дзвінок подати та зв’язати. і чим вони різні.
Дозволяє вивчати дзвінки та застосовувати будь-яку денну термінологію.
У вас є три машини, your_scooter , your_car and your_jet
які починаються з однакового механізму (методу). Ми створили об’єкт automobile
методом push_button_engineStart
.
var your_scooter, your_car, your_jet;
var automobile = {
push_button_engineStart: function (runtime){
console.log(this.name + "'s" + ' engine_started, buckle up for the ride for ' + runtime + " minutes");
}
}
Давайте зрозуміємо, коли використовується дзвінок і застосувати застосований. Нехай припустимо, що ви інженер, який у вас є your_scooter
, your_car
і your_jet
який не прийшов із push_button_engine_start, і ви хочете скористатися третьою стороною push_button_engineStart
.
Якщо запустити наступні рядки коду, вони дадуть помилку. ЧОМУ?
//your_scooter.push_button_engineStart();
//your_car.push_button_engineStart();
//your_jet.push_button_engineStart();
automobile.push_button_engineStart.apply(your_scooter,[20]);
automobile.push_button_engineStart.call(your_jet,10);
automobile.push_button_engineStart.call(your_car,40);
Отже, наведений вище приклад успішно надає вашому_scooter, your_car, your_jet особливість автомобільного об'єкта.
Давайте зануримося глибше
Тут ми розділимо вищевказаний рядок коду.
automobile.push_button_engineStart
допомагає нам використовувати метод, який використовується.
Далі ми використовуємо застосувати або зателефонувати за допомогою позначення крапки.
automobile.push_button_engineStart.apply()
Тепер застосуйте та подзвоніть прийняти два параметри.
- контекст
- аргументи
Отже, тут ми встановлюємо контекст у заключному рядку коду.
automobile.push_button_engineStart.apply(your_scooter,[20])
Різниця між викликом та застосуванням полягає лише в тому, що прийом приймає параметри у вигляді масиву, тоді як виклик просто може приймати список аргументів, розділених комами.
що таке функція JS Bind?
Функція прив'язки - це в основному зв'язує контекст чогось, а потім зберігає його в змінну для виконання на більш пізньому етапі.
Давайте зробимо наш попередній приклад ще кращим. Раніше ми використовували метод, що належить до автомобільного об'єкта, і використовували його для оснащення your_car, your_jet and your_scooter
. Тепер давайте уявимо, що ми хочемо дати окремо push_button_engineStart
окремо для запуску наших автомобілів окремо на будь-якому наступному етапі виконання, який ми бажаємо.
var scooty_engineStart = automobile.push_button_engineStart.bind(your_scooter);
var car_engineStart = automobile.push_button_engineStart.bind(your_car);
var jet_engineStart = automobile.push_button_engineStart.bind(your_jet);
setTimeout(scooty_engineStart,5000,30);
setTimeout(car_engineStart,10000,40);
setTimeout(jet_engineStart,15000,5);
все ще не задоволений?
Давайте зрозуміємо, як сльоза. Час експериментувати. Ми повернемося до виклику та застосуємо програму функції та спробуємо зберегти значення функції як еталон.
Експеримент нижче не вдається, тому що виклик і застосувати викликаються негайно, отже, ми ніколи не потрапляємо до етапу зберігання посилання у змінній, де функція прив'язки краде показ
var test_function = automobile.push_button_engineStart.apply(your_scooter);