an extensible program-code-template for creating objects, providing initial values for state (member variables) and implementations of behavior (member functions or methods)
an object or class is based on another object (prototypal inheritance) or class (class-based inheritance), acquires all the properties and behaviours of the parent object using the same implementation
the bundling of data with the methods that operate on that data. Encapsulation is used to hide the values or state of a structured data object inside a class, preventing unauthorized parties' direct access to them.