Насколько я понимаю, стрелочная функция должна иметь ту же область видимости, что и контекст, в котором она была создана. Как показано ниже, один ответ: «Это большой зеленый ящик с номером», что я понимаю.
let box6 = {
color:'green',
position:1,
font:'big',
clickMe:function(){
return ()=>{
let str='This is the box number '+this.color+' '+ this.font;
console.info(str)
} }
}
но в классе React функция стрелки handleClick определена в классе LoggingButton, предполагается, что у нее такая же область видимости, но в консоли она возвращает: это LoggingButton, я думал, что она должна возвращать глобальную область или любую другую область на один уровень выше, чем LoggingButton. почему это происходит? Большое Вам спасибо!!!
class LoggingButton extends Component {
handleClick=()=>{
console.info('this is :', this)
}
render() {
return (
<div className = "App">
<button onClick = {this.handleClick}>Click Me</button>
</div>
);
}
}
Если бы handleClick
был обычной функцией, объем this
находился бы в пределах handleClick
. «На уровень выше» - это LoggingButton
.
Все очень просто.
()=>{}
такой же, как function(){}.bind(this)
. А это в вашем случае LoggingButton
.
Пожалуйста, дайте мне знать, если это поможет.
Это не правильно. Стрелочные функции вообще не связывают this
Затем скажите, что он делает. Вы говорите, что я неправ, не высказывая своей точки зрения. Это мерзко.
См. stackoverflow.com/q/34361379/5647260 и developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/….
Я видел это. Но знаете ли вы, что результат будет таким же, если вы привяжете это или примените функцию стрелки?
Синтаксис
handleClick = …
может вас сбить с толку. Это действительно происходит в конструкторе.