Каталог
Веб-разработка с нуля: четыре курса по порядку.
HTML, затем CSS, JavaScript и SQL. Каждый курс говорит, что нужно знать до него и что вы будете уметь после.
Загружаем курсы…
Каталог
HTML, затем CSS, JavaScript и SQL. Каждый курс говорит, что нужно знать до него и что вы будете уметь после.
Загружаем курсы…
Урок 71 из 114 · 10 мин
call, apply и bind, свойства length и name, toString у функций и потеря this.
Передал cart.add в обработчик клика — и this стал совсем другим! Хе-хе.
У функций есть методы, чтобы явно задать this: call, apply и bind.
call()fn.call(thisArg, a, b) — вызвать функцию с заданным this и аргументами по одному.function label(currency) { return `${this.name}: ${this.price} ${currency}`; }
console.log(label.call({ name: "Пенал", price: 290 }, "₽"));apply()fn.apply(thisArg, [a, b]) — как call, но аргументы массивом.console.log(Math.max.apply(null, [150, 290, 220]));bind()fn.bind(thisArg, …args) — новая функция с закреплённым this (и частью аргументов).const cart = { items: [], add(x) { this.items.push(x); return this.items.length; } };
const add = cart.add.bind(cart);
add("Блокнот");
console.log(add("Пенал"));fn.length · fn.namelength — число объявленных параметров (до первого со значением по умолчанию и без rest), name — имя функции.function order(item, qty, size = "M") {}
console.log(order.length, order.name, ((a, ...b) => 0).length);Functionnew Function("a", "b", "return a + b") создаёт функцию из строк. Все функции — экземпляры Function. Как и eval, выполняет текст как код — небезопасно.const add = new Function("a", "b", "return a + b");
console.log(add(2, 3), add instanceof Function, (() => 0) instanceof Function);fn.toString()const double = (x) => x * 2;
console.log(double.toString());Передаёшь метод объекта как колбэк — привяжи его через bind или оберни в стрелку.
Сделай add — метод cart.add, навсегда привязанный к cart через bind, и price — результат label.call(raf).
bind — пока нетcall — пока нетВыберите один ответ.
Чем apply отличается от call?
Введите короткий ответ без лишних пробелов.
Чему равно ((a, b, c = 1) => 0).length? Введи число.
Проверяем состояние обучения…