вы не можете передать "этот" объект в качестве параметра в анонимной функции. Когда вы делаете это таким образом, вы ошибаетесь, если думаете, что обязываете. Когда вы набираете функцию с помощью Anonymus, "this" автоматически показывает объект окна, да.
Примечание 1: нет конструктора или прототипа стрелочных функций. не используется с новым. Цель не в том, чтобы создать экземпляр объекта.
Примечание 2: поскольку 2 стрелочные функции не связываются с "this" привязка, контекст лексической области видимости не связывается автоматически.
let clicked = () => {
console.log(this) // *"this"* will always show the window object because it was written with arrow function.
}
let clicked = function(){
console.log(this) // *"this"* will show the" p " element. Because bind inte.
}
document.querySelector("#p").addEventListener("click", clicked)
document.querySelector("#p").addEventListener("click", clicked.bind(this)) // If you do bind this way and call the clicked function, which is defined as the arrow function, *"this"* window will show the object.
<p id="p" onclick="myFunc(this)">foo</p> // The reason this works is because it shows the element when you say *"this"*. but the function is in scope if you look at the console.log(this) output, it will show the window object.
function myFunc(el){
console.log(el.innerHTML) // outputs "foo"
console.log(this) //
}
Итак, вы не можете повторно привязать "this" в стрелочной функции. Он всегда будет определяться как контекст, в котором он был определен. Если вы хотите, чтобы это было значимым, вы должны использовать обычную функцию.
Надеюсь, это немного показательно.