Вот вопрос, который я часто получаю в классе:
Можем ли мы потратить немного больше времени по поводу основы того, как Это Работает и как определить, что он ссылается? Я бы понравился для кого-то, кто немного знаком с концепцией, чтобы объяснить это, как мне 5 лет.
Самое простое объяснение Это Это определено, когда вызывается функция. Если функция является атрибутом объекта, и этот объект используется при его вызове, как Object.Coolfunction () Тогда Это это объект. Если функция не является атрибутом объекта, то Это это null Отказ
Проверьте это:
const person = {
name: "Amiro",
sayHello: function () {
console.log("Hello from " + this.name)
}
}
person.sayHello() // => prints "Hello from Amiro"
const sayHello = person.sayHello
sayHello() // what happens here? What is "this" when we call this function?
Вот где он становится очень сложно: обратные вызовы. Вот пример. Предположим, что есть элемент кнопки, хранящийся в переменной кнопка Отказ
button.addEventListener('click', person.sayHello)
Когда кнопка нажала, функция хранится в человек.Сайхелло называется, но важно отметить, что он называется как функция, а не как атрибут человек . Итак, Это это ноль, когда вы нажимаете кнопку.
Есть два способа установить Это Настоятельно, так что это то, что вы хотите, чтобы это было всегда: метод .связывать () и используя функции стрелки.
.связывать ()
Все функции имеют метод .связывать () это принимает один аргумент. .связывать () Возвращает новую функцию, которая делает то же самое, но у него будет переменная Это связан с этим аргументом. Пример:
function sayHello() {
console.log("hello from " + this.name)
}
const sayHelloFromAmiro = sayHello.bind({name: 'Amiro'})
sayHelloFromAmiro() // => prints "hello from Amiro"
{Название: 'amiro'} был связан с Это Когда мы позвонили .bind ({name: 'amiro'}) на Сайхелло Отказ
Функции стрелки
Когда вы делаете функцию, используя () => {} Синтаксис, известный как синтаксис стрелки , Это связан в то время, когда вы создаете функцию. Это действительно полезно, если у вас есть функция на объекте, который вы хотите действовать как слушатель события.
Думайте обратно к примеру элемента кнопки DOM под названием кнопка Отказ Вот с функциями стрелки:
const person = {
name: "Amiro",
sayHello: () => {
console.log("Hello from " + this.name)
}
}
person.sayHello() // => prints "Hello from Amiro"
button.addEventListener('click', person.sayHello)
На этот раз мы получим то, что мы ожидаем, когда мы нажимаем кнопка .
Оригинал: “https://dev.to/momentum/what-is-this-in-javascript-3lc1”