I think two features that have almost ruined the language is the Function.apply and the new keyword.
Function.apply is to JS as Metaprogramming and indirection is to Ruby. Features don't have a priority of use, and programmers reach for the most interesting one (and go to town misusing them).
If there was no new and no Function.apply, JS would be more coherent and remain exactly as useful. It means that when an event is triggered or whatnot, rather than changing the meaning of 'this', it passes the target in as a named variable to the anon-function. Which is way better!
If you constantly have to look up 'what is this set to in this callback' you're so completely doing it wrong!