Ургенчского филиала Ташкентского университета информационных технологий
Download 131.25 Kb.
|
- Bu sahifa navigatsiya:
- Более короткие функции
- Лексика this
Стрелочные функции
(Arrow functions) Стрелочные функции — функции вида "arrow function expression" (неверно fat arrow function) — имеют укороченный синтаксис по сравнению с function expression и лексически связывает значение this. Стрелочные функции всегда анонимны. Посмотрите также пост блога hacks.mozilla.org "ES6 In Depth: Arrow functions". На введение стрелочных функций повлияли два фактора: более короткие функции и лексика this. Более короткие функции В некоторых функциональных паттернах приветствуется использование более коротких функций. Сравните: var a = [ 'Hydrogen', 'Helium', 'Lithium', 'Beryllium' ]; var a2 = a.map(function(s) { return s.length; }); console.log(a2); // выводит [8, 6, 7, 9] var a3 = a.map(s => s.length); console.log(a3); // выводит [8, 6, 7, 9] Copy to Clipboard Лексика this До стрелочных функций каждая новая функция определяла своё значение this (новый объект в случае конструктора, undefined в strict mode, контекстный объект, если функция вызвана как метод объекта, и т.д.). Это оказалось раздражающим с точки зрения объектно-ориентированного стиля программирования. function Person() { // Конструктор Person() определяет `this` как самого себя. this.age = 0; setInterval(function growUp() { // Без strict mode функция growUp() определяет `this` // как global object, который отличается от `this` // определённого конструктором Person(). this.age++; }, 1000); } var p = new Person(); Copy to Clipboard В ECMAScript 3/5 эта проблема была исправлена путём присвоения значения this переменной, которую можно было бы замкнуть. function Person() { var self = this; // Некоторые выбирают `that` вместо `self`. // Выберите что-то одно и будьте последовательны. self.age = 0; setInterval(function growUp() { // Колбэк ссылается на переменную `self`, // значением которой является ожидаемый объект. self.age++; }, 1000); } Copy to Clipboard Альтернативой может быть связанная функция (bound function), с которой можно правильно вручную определить значение this для функции growUp(). В arrow function значением this является окружающий его контекст, так следующий код работает ожидаемо: function Person() { this.age = 0; setInterval(() => { this.age++; // |this| должным образом ссылается на объект Person }, 1000); } var p = new Person(); Copy to Clipboard Далее Подробное техническое описание функций в статье справочника Функции Смотрите также Function в Справочнике JavaScript для получения дополнительной информации по функции как объекту. Внешние ресурсы: ECMAScript® 2015 Language Specification Учебник по Javascript - замыкания « Предыдущая статья Следующая статья » Download 131.25 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling