É um estilo de programação orientada a objeto onde não existem classes, também conhecido como programação orientada a instâncias e programação orientada a objeto sem classes. Cada novo objeto é criado clonando-se objetos existentes que são chamados de protótipos.

Nas linguagens orientadas a objetos tradicionalmente o comportamento das instâncias é definido em classes através de uma coleção de métodos e atributos. A adição de novas funcionalidades a uma classe é feito através da extensão de uma classe já existentes, exigindo que para cada objeto exista uma classe com a sua definição. De um lado temos o comportamento definido pela classe e o estado representado pelas instâncias dessa classe.

A programação orientada a protótipos privilegia a relação entre objetos para uma posterior divisão em classes o que faz com que o programador foque inicialmente na relação entre objetos. Através de um objeto já existente criam-se instâncias para resolver um determinado problema (ou parte dele) e só depois esses objetos criados serão classificados em uma estrutura similar ao modelo de classes. É usual alterar esses objetos em tempo de execução e poucas linguagens de programação orientadas a objeto permitem a alteração de classes em tempo de execução. Vale mais a pena permitir que um programa altere a estrutura de um objeto em tempo de execução ou partir logo para um sistema orientado a objetos baseado em protótipos ?

Essas linguagens de programação são geralmente interpretadas com tipagem dinâmica e será um desafio implementá-las tendo como alvo código nativo e talvez uma tipagem estática (se não impossível ser tipado estaticamente).