JS фактически обладает возможностью создавать новые объекты с произвольными прототипами - возможность создавать «наследников» от любых объектов:
// inherit() возвращает вновь созданный объект, наследующий свойства
// объектапрототипа p. Использует функцию Object.create() из ECMAScript 5,
// если она определена, иначе используется более старый прием.
function inherit(p) {
if (p == null) throw TypeError(); // p не может быть значением null
if (Object.create) // Если Object.create() определена...
return Object.create(p);// использовать ее.