An OO JS tutorial should also include a discussion of the this pointer, and how it's not like other OO languages.
In JS, this reflects the context of the caller, not the object (which I think is messed up), so you have to learn call and apply.
In JS, this reflects the context of the caller, not the object (which I think is messed up), so you have to learn call and apply.
var a = {fn : function () {this.doStuff()}},
b = {};
b.method = a.fn;// What now?
So what JavaScript did actually makes some sense.Another viable solution would be to have `this` passed into a method explicitly, like in Python. Then the expression `a.b()` could desugar to something like `a.b(a)` with `b` expecting `this` as its first argument. This also has some disadvantages. You could also do like Lua and have a separate syntax for calling methods this way (a:b()), but this is also confusing.
In short, there is no perfect solution.