From Oliver Steele's article, Classes and Prototypes, at http://osteele.com/archives/2004/03/classes-and-prototypes
In instance-first development, one implements functionality for a single instance, and then refactors the instance into a class that supports multiple instances.
says that an instance of a class can be replaced by the definition of the instance, without changing the program semantics.
program declares an instance with a method named "f" that returns 100:
<method name="f">return 100;</method>
program declares an equivalent reusable class, and creates an instance of it:
<method name="f">return 100</method>
versions 1.0 through 1.5 (the versions in browsers) is also a prototype-based language, but lacks classes as a first-class syntactic entity, and lacks the hierarchical syntax that Java, C++, and OpenLaszlo
2.0, JScript.NET, and Python have a class definition syntax, but donít use the same syntax to define instance members. For example, contrast the following two Python programs, which parallel the OpenLaszlo
myobject = object()
myobject.f = lambda f: 100
myobject = MyClass()
The syntactic version of the instance substitution principle makes a class look like a function or a macro. Class, function, and macro definitions are all mechanisms for abstracting program structure so that it can be reused.