Когда Это используется в функции стрелки, Это будет Это ценность в окружающей лексической области.
Функции стрелки меняют много вещей, поэтому есть две лучшие практики, которые вам нужно знать.
- Не создавайте методы со стрелками функциями
- Создание функций внутри методов со стрелками функций
::: Примечание Эта статья является выдержкой из Учите 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”