Когда Это
используется в функции стрелки, Это
будет Это
ценность в окружающей лексической области.
Функции стрелки меняют много вещей, поэтому есть две лучшие практики, которые вам нужно знать.
- Не создавайте методы со стрелками функциями
- Создание функций внутри методов со стрелками функций
::: Примечание Эта статья является выдержкой из Учите JavaScript Отказ Проверьте это, если вы нашли эту статью полезную. :::
Прежде чем прочитать это
Если вы запутались о Это
Ключевое слово, попробуйте читать Эта статья Отказ Это может помочь вашему убранию некоторых путаний относительно Это
Отказ
Практика № 1: не создавайте методы со стрелками функциями
Когда вы используете объектно-ориентированные программирование, вам может потребоваться вызвать метод из другого метода. Чтобы вызвать метод из другого метода, вам нужно Это
указать обратно в экземпляр (который называется методом).
Пример:
Давайте построим Человек
с Сайхи
метод. Сайхи
говорит Привет!
, затем выруются, чтобы закончить разговор, заявив имя человека.
Мы можем использовать GetFullName
Метод, который возвращает полное имя человека внутри Сайхи
Отказ
function Human(firstName, lastName) { this.firstName = firstName; this.lastName = lastName; } Human.prototype.getFullname = function () { return this.firstName + " " + this.lastName; }; Human.prototype.sayHi = function () { console.log(`Hi! My name is ${this.getFullName()}`); };
Экземпляр может использовать Сайхи
метод И вы ожидаете, что это будет работать. Это работает, потому что Это
указывает обратно в экземпляр.
const zell = new Human("Zell", "Liew"); zell.sayHi();
Смотри, что произойдет, если вы измените Сайхи
к функции стрелки.
Human.prototype.sayHi = (_) => { console.log(`Hi! My name is ${this.getFullName()}`); }; // ... zell.sayHi();
…
Почему?
В этом случае Это
внутри Сайхи
указывает на Окно
Отказ С Окно
не имеет GetFullName
Метод, звонок GetFullName
приведет к ошибке.
Это
указывает на Окно
потому что Окно
Лексический Это
Значение это Окно
. Мы можем проверить, что Это
это Окно
Войдите в систему.
Human.prototype.sayHi = (_) => { console.log(this); console.log(`Hi! My name is ${this.getFullName()}`); }; // ... zell.sayHi();
Короче говоря: Не используйте функции стрелки для создания методов!
Создание функций внутри методов со стрелками функций
Это
Всегда указывает на Окно
Когда он используется в простой функции. Заявление верно, даже если вы создаете простую функцию внутри метода.
const object = { this() { function sayThis() { console.log(this); } sayThis(); }, }; object.this();
Мы обычно хотим Это
быть объектом, когда мы используем Это
внутри способа. (Итак, мы можем назвать другие методы).
Один из способов назначать Это
в другую переменную. Мы часто называем эту переменную Я
или что
Отказ Затем мы будем использовать Я
или что
внутри функции.
const object = { this() { const self = this; function sayThis() { console.log(self); } sayThis(); }, }; object.this();
Другой способ состоит в том, чтобы создать новую функцию с Bind
Отказ
const object = { this() { function sayThis() { console.log(this); } const correctSayThis = sayThis.bind(this); correctSayThis(); }, }; object.this();
Если вы используете функции стрелки, вам не нужно использовать Я
, что
или связывать
. Вы можете написать функцию стрелки напрямую, а Это
будет указывать на объект (потому что окружающий это
ценность является объектом).
const object = { hello() { const sayThis = (_) => { console.log(this); }; sayThis(); }, }; object.hello();
Спасибо за прочтение. Эта статья была первоначально опубликована на мой блог Отказ Зарегистрируйтесь на мою рассылку, если вы хотите больше статей, чтобы помочь вам стать лучшим разработчиком Frontend.
Оригинал: “https://dev.to/zellwk/arrow-function-best-practices-1po1”