Prototype-Based Object Systems
Most well-known object-oriented programming languages have a concept of class, which defines a set of shared information for a group of objects. In these languages, every object is an instance of at least one class, and inheritance is defined between the classes. There is, however, an alternate way to define shared data and inheritance among objects: Prototype-based object systems. These languages use prototypical objects instead of classes to determine shared traits, which allows for some interesting flexibility that is not commonly found in class-based systems. Some examples of prototype-based languages are Self, Javascript, and Io.