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);

Комментарии