mrusklon
@mrusklon
Не получается? Яростно гугли!

Есть практические уроки для того чтоб понять как работает this в javascript?

Не пойму как работает this , надо практика на примере где без this не обойтись например , может я слишком тупой , а может все проще чем кажется но я себя слишком запутал.
  • Вопрос задан
  • 515 просмотров
Решения вопроса 1
@lega
Все просто: this - это объект из которого вызывается ф-ия, все.
пример:
obj.func() // тут this = obj
obj.user.func() // тут this = user
func() // тут this = window, т.к. объект не укаазан

если переместить функцию в другой объект, то правило сохраняется, т.е. this будет ссылаться на новы объект из которого вызывается функция.

Так же есть функции которые позволяют задать this:
func.call(newThis, args1, arg2, arg3)
func.apply(newThis, [args1, arg2, arg3])
call и apply вызывают функцию и задают this, т.е. this = newThis

По сути это всё, все другие фокусы основаны на этом, например ф-ия bind (IE 9+) которая просто замыкает (привязывает) нужный this:
funcWithThis = func.bind(newThis)
В итоге как бы её не вызвать: funcWithThis() или obj.funcWithThis(), исходная функция func будет вызвана с указанным this=newThis.

На счет классов и new:
inst = new MyClass(arg)
можно разложить примерно так:
inst = {};
inst.__proto__ = MyClass.prototype;
inst.constructor = MyClass;
inst = MyClass.call(inst, arg) || inst;
т.е. new создает новый объект с прототипом от MyClass, а потом вызывает эту ф-ию с установкой this как новый объект.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@ReeZo
Ответ написан
Комментировать
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
Комментировать
@EshBobrow
на самом деле все просто, в js есть понятия замыкание (closure) и контекст (context).
замыкание (closure) - это область видимости в котором объявлена функция, поэтому всё что видно в этой области видимости будет доступно в функции.
контекст (context) - это объект внутри которого, т.е. в контексте, вызывается функция. Поэтому все поля этого объекта будут доступны через переменную this.
Ответ написан
Ваш ответ на вопрос

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

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