JavaScript Мтоды массивов (часть 3)
// =================================== Метод bind =================================== //
// ================ Пример 1
const auto = {
brand: "BMW",
drive: function () {
return `Заведем наш ${this.brand}`;
}
}
const motorBike = {
brand: "Suzuki"
}
// bind привязывает метод, опредеденный для одного объекта к нужному объекту
const autoDrive = auto.drive.bind(auto);
const motorDrive = auto.drive.bind(motorBike);
const someDrive = auto.drive.bind({brand: "Корабль"});
console.log(autoDrive(), " | ", motorDrive(), " | " , someDrive());
// Пример из Jquery
const $ = document.querySelector.bind(document); // Биндим вункцию $ к объекту document
const header = $('h2').textContent;
// console.log(header);
// ================ Пример 2
const bill = {
tip: 0.1,
calculate(total) {
// console.log(this);
return total + total * this.tip
},
detail(dish1, dish2, sum) {
return `Ваш обед (${dish1}, ${dish2}) стоит ${this.calculate(sum)}`;
}
}
// Используем оригинальный объект
const pay = bill.calculate(1000);
console.log(pay);
// Используем метод calculate за пределами объекта bill
const payCount = bill.calculate.bind(bill);
console.log(payCount(1000));
// Используем метод calculate за пределами объекта bill для нового объекта
const payCount = bill.calculate.bind({tip: 0.2});
console.log(payCount(1000));
// Используем метод calculate за пределами объекта bill для нового объекта вариант 2 аргумент.
const payCount = bill.calculate.bind({tip: 0.2}, 1000);
console.log(payCount());
// =================================== Метод call и apply=================================== //
const pay = bill.calculate.bind(bill); // bind
console.log(pay(1000));
const payCount = bill.calculate.call(bill, 1000); // call
console.log(payCount);
const payCount2 = bill.calculate.apply(bill, [1000]); // apply
console.log(payCount2);
// =================================== Примеры =================================== //
const pay = bill.detail('pizza', 'salad', 1000);
console.log(pay);
const payCount = bill.detail.call(bill, 'pizza', 'salad', 1000);
console.log(payCount);
const payCount2 = bill.detail.apply(bill, ['pizza', 'salad', 1000]);
console.log(payCount2);
Комментарии
Отправить комментарий