THIS should have been called THAT, so that people coming from other languages don't get confused. A good language must also mitigate differences and be easy to maintained by mediocre developers.
If THIS was properly implemented, Javascript could have been called Scala. See, in the end it has nothing to do with being functional or not.
Last point, ES6 fixes THIS crap with classes... finally.
Why would do you say that ES6 by adding Class definition will "fix THIS crap"?
You will still need to understand how "this" binding gets resolved depending on the execution context.
Here is the spec one should use as a first-hand source of information. Its not easy to learn from there but it could give one a sense of real understanding of the keyword "this":
https://people.mozilla.org/~jorendorff/es6-draft.html#sec-this-keyword
=) When I started to work with JS and relied on a common sense I was really upset. But you know before starting to write in any new language one should learn it first, and not by googling his questions but by reading a good book ;)