Звоните, применяйте и связывайте. и как они отличаются.
Позволяет учиться звонить и применять, используя любую ежедневную терминологию.
У вас есть три автомобиля, 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);
Таким образом, приведенный выше пример успешно предоставляет your_scooter, your_car, your_jet функцию из автомобильного объекта.
Давайте погрузимся глубже.
Здесь мы разделим вышеприведенную строку кода.
automobile.push_button_engineStart
помогает нам получить используемый метод.
Далее мы используем apply или call с использованием точечной нотации.
automobile.push_button_engineStart.apply()
Теперь примените и вызовите принять два параметра.
- контекст
- аргументы
Итак, здесь мы устанавливаем контекст в последней строке кода.
automobile.push_button_engineStart.apply(your_scooter,[20])
Разница между call и apply заключается в том, что apply принимает параметры в виде массива, в то время как call может просто принимать список аргументов через запятую.
что такое функция 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);
все еще не удовлетворены?
Давайте сделаем это ясно, как слеза. Время экспериментировать. Мы вернемся к вызову и применим функцию application и попытаемся сохранить значение функции в качестве ссылки.
Приведенный ниже эксперимент не удался, потому что call и apply вызываются немедленно, следовательно, мы никогда не доберемся до стадии сохранения ссылки в переменной, где функция bind перехватывает показ
var test_function = automobile.push_button_engineStart.apply(your_scooter);