@heIIfire

Почему this указывает на класс, в котором был создан?

В JS мы имеет четкое определение, что "this" в стрелковых функциях указывает на контескт, в котором был вызван. А тут почему так не работает?

class Parent extends React.Component {

        render(){ 
            return <Child checkThis={this.checkThis} />
       }
       checkThis = () => {
            console.log(this);
      }
}


class Child extends React.Component {
          render(){
             this.props.checkThis(); // выводит класс Parent
             return '';
         }
}
  • Вопрос задан
  • 396 просмотров
Пригласить эксперта
Ответы на вопрос 2
Vlad_IT
@Vlad_IT Куратор тега JavaScript
Front-end разработчик
Вы путаете, стрелочные функции берут контекст из того места, где были созданы.
Ответ написан
Lynn
@Lynn
nginx, js, css
Ну учитывая, что этот синтаксис вообще ещё не везде есть и у вас наверняка бабель, то это на самом деле выглядит так:

class Parent extends React.Component {
    constructor() {
        this.checkThis = () => {
            console.log(this);
        }
    }

    render() { 
        return <Child checkThis={this.checkThis} />
    }
}

class Child extends React.Component {
    render(){
        this.props.checkThis(); // выводит класс Parent
        return '';
    }
}


И да, вы всё перепутали, и контекст стелочной функции как раз таки лексический. Так что логично, что внутри конструктора класса её `this` указывается на экземпляр этого класса.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы