> Does it support prototypal inheritance? (also great)
No. Dart has classical inheritance, which by the large number of classical inheritance libraries for Javascript, is still very popular even when prototypal inheritance is available.
I personally abhor prototypal inheritance. It's aesthetically unappealing, hard to reason about, hard to optimise, and turns what is usually a declarative pattern into an imperative one. When most people are approximating classical inheritance anyway, that's a big sign.
It's sometimes nice that objects can differ structurally from their class, but I've never found it that useful.
Ah, you are right, it doesn't support prototypal inheritance.
"When most people are approximating classical inheritance anyway, that's a big sign."
Two things on that:
1. Most people (vast majority) learned OOP in a classical style, so that's what they're going to be comfortable with and will try to implement. It doesn't automatically mean classical style is superior.
2. You may want to check out the Klass library[1]. It provides a "classical interface to prototypal inheritance." So perhaps classical style is easier to use, but prototypal is better to have in the background.
Sorry, I don't think you understand how OOP works. In classical inheritance, each object only contains its data and a reference to its class. The class owns the methods - they are not copied to every instance. Most uses of prototypal inheritance follow a similar pattern.
Every language under the sun has closures and first class function objects now (Even C if you count llvm-specific extensions, and Java if you count one method interfaces as a suitable workaround until version 8).
Also, Javascript's version of prototypal inheritance isn't very good. Name me one thing you can do well with Javascript's inheritance that you can't do well in any other dynamic language with some notion of objects having property dictionaries (Perl, Python, Ruby, Lua, etc.).
Does it have closures and functions-as-object passing? (amazing feature of js)
Does it support prototypal inheritance? (also great)
I honestly don't know if Dart does these two, but they're pretty important to me. Does anyone know?
Edit: after a little research it looks like the answers are "Yes" and "No". I'd be willing to try it then.