Classes are an incredibly powerful way to encapsulate functionality. Javascript has never had the proper concept of a class (let alone inheritance) so we have half assed equivalents such as prototypes, bind methods, or function constructors which attach functions to raw object classes. Aside from being half assed, they're inefficient in different ways. Even understanding how the "this" keyword works is a nightmare because unlike sane OO languages, "this" can point at the object, nothing, or something else such as a toplevel window object depending on where it's used from. So it's not uncommon to see code where someone assigns "that" to "this" to work around some issue. Add in other esoteric issues like scoping rules for var and it's just a nightmare.
And of course no JS IDE is remotely as forgiving or useful as it might be because there is no way at compile time to figure out what an object *is* beyond some simple inferences.
This is the reason the likes of Typescript, GWT and other JS generators exist at all. Javascript is treated as the problem to solve. e.g. Typescript extends JS with modules, classes, interfaces, typechecking and so on. The compiler can use those to catch errors at compile time instead of runtime and it can emit functionally equivalent JS. Stuff that allows an IDE to construct an AST and offer refactoring, method signatures and other useful functionality they've enjoyed for years in other languages. It even a specialised function where "this" behaves in a sane way. On the whole, programming Typescript is a lot more pleasant than JS but it's still a thin veneer.