Para crear objetos personalizados podemos crear nuestros propios constructores a través de funciones con métodos y propiedades personalizados que colocamos en el prototype de nuestro constructor. Ejemplo constructor de Persona:

var Person = function(name) {
  this.name = name;
};

Person.prototype.greet = function() {
  console.log('Hola, soy ' + this.name);
};

Person.prototype.setAge = function(age) {
  this.age = age;
};

var pepito = new Person('Pepito');

pepito.greet(); // Hola, soy Pepito

console.log(pepito.constructor.prototype); // Object {}

Operador new

Para utilizar nuestro constructor Person se utiliza el operador new con el cual creamos una instancia de Person que hereda todos los métodos y propiedades definidos en el prototype del constructor Person.

Object.create

Otra opción para crear instancias de nuestro constructor Person es a través del método create del constructor de Object:

var juanito = Object.create(Person.prototype, {
  name: {
    writable: true,
    value: 'Juanito'
  }
});

juanito.greet(); // Hola, soy Juanito

La ventaja de este método es que podemos configurar cómo se comportan las propiedades de nuestra instancia, writable, configurable, enumerable, etc.

Object.defineProperty

Este método nos permite definir una nueva propiedad sobre un objeto ó modificar una existente:

Object.defineProperty(juanito, 'job', {
  value: 'Artist',
  writable: true
});

console.log(juanito); // Person {name: "Juanito", job: "Artist"}