Object: create

Con object create(proto, proops) podemos crear un objeto a partir del prototype de otro objeto, incluso se le pueden añadir nuevas propiedades mediante un objeto property con el nombre y definición.

Su sintáxis es object.create( prototype, [propiedades nuevas])

El objeto de partida actúa como prototipo para la funcion creada, por lo que ésta hereda métodos y propiedades del objeto que se usa como modelo. .

var empleo = {

    puesto: '',

    horario: '',

    disponible: true,

    verDetalles() {

        let estado = this.disponible? 'vacante' : 'ocupado';

        console.log('El puesto de '+ this.puesto +' está ' + estado);

    }

};
var oficina = Object.create(empleo);

oficina.puesto = "recepcion";

var almacen = Object.create(empleo);

almacen.puesto = 'cargador';

almacen.disponible = false;

oficina.verDetalles();

almacen.verDetalles();

console.log(empleo.isPrototypeOf(oficina));    //true

console.log(empleo.isPrototypeOf(almacen) )   //true

A partir del objeto empleo se instancia los objetos oficina y almacen. Ambas instancias están vacías, pero pueden leer las propiedades y métodos del objeto de partida, empleo, porque este es su prototype. Para los objetos instanciados habría que sobreescribir las propiedades con los valores que le corresponda a cada uno. .

Creando un nuevo elemento con propiedades:

var Personal = {empresa:"Acme"};

var jefe = Object.create(Personal, {depto:{value :"ventas"}});

var empleo = Object.create(Personal);

console.log(jefe.empresa, jefe.depto) ;     // "acme", "ventas"

console.log(empleo.empresa);

En este ejemplo ahora el objeto jefe tiene una propiedad denominada depto. Por su parte empleo no tiene ninguna propiedad nueva, solo puede leer la propiedad empresa de Personal.