Есть практические уроки для того чтоб понять как работает this в javascript?
Все просто: 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 как новый объект.
на самом деле все просто, в js есть понятия замыкание (closure) и контекст (context).
замыкание (closure) - это область видимости в котором объявлена функция, поэтому всё что видно в этой области видимости будет доступно в функции.
контекст (context) - это объект внутри которого, т.е. в контексте, вызывается функция. Поэтому все поля этого объекта будут доступны через переменную this.