Запрет на "this"
«Удаление ключевого слова this из JavaScript делает язык лучше!»
Проблема this
this зависит от того, как вызвана функция, а не от того, где она определена.
var user = { firstName: 'Джони' }
var admin = { firstName: 'Админ' }
function funcName() {
console.log(this.firstName)
}
user.f = funcName
admin.g = funcName
user.f() // Джони
admin.g() // Админ
admin['g']() // Админ
Недостатки this
- Теряет контекст во вложенных функциях
- Теряет контекст в обратных вызовах (callback)
- Теряет контекст при использовании как обработчика событий
JavaScript как функциональный язык
«JavaScript — это одновременно функциональный и прототипно-ориентированный язык. Если мы избавимся от this, у нас останется JavaScript как функциональный язык. Это даже лучше!»
Отказ от this
«Лучший способ избежать проблем с this — вообще его не использовать!»
// Вместо класса с this:
function createCounter() {
let count = 0
return {
increment: () => { count++ },
getCount: () => count
}
}
С React Hooks можно создавать компоненты с состоянием без this.