Why would you introduce that distinction into what is an inherently dynamic language? "virtual" keyword in C++ is an option to avoid paying the cost for a polymorphic call (so it can be inlined at compile time and/or no extra pointer dereference is done). It's a compromise to allow incremental cost of language features--but in JavaScript?