Todo en JavaScript es un objeto, heredan propiedades y métodos del constructor Object.

prototype

prototype es una propiedad que tiene el constructor Object que no es mas que una cadena de funcionalidades entre las cuales podemos encontrar métodos como: hasOwnProperty, propertyIsEnumerable, toString, etc.

Es considerada una propiedad viva de tal modo que si nosotros agregamos propiedades o funcionalidades en esta propiedad, automáticamente serán heredadas a todos los demás objetos de JavaScript pues todos heredan del prototype de Object.

var obj = {};

Object.prototype.sayHello = function() {
  console.log('Hello');
}

obj.sayHello(); // Hello

var arr = [];
var num = 1;

arr.sayHello(); // Hello
num.sayHello(); // Hello

No es una práctica muy recomendada pero es útil cuando queremos agregar métodos que no están soportados en navegadores viejos. Ejemplo es5-shim

keys

Esté método de Object devuelve un arreglo con las propiedades enumerables de un objeto dado.

var person = {
  nombre: 'Miguel',
  edad: 23
}

console.log( Object.keys(person) ); // ["nombre", "edad"]

freeze

Este método retorna un objeto congelado, esto quiere desir que no es posible agregar/eliminar ni editar propiedades.

var person = {
  nombre: 'Miguel',
  edad: '23'
}

Object.freeze(person);

person.nombre = 'Updated'; // Uncaught TypeError: Cannot assign to read only property 'nombre' of object '#<Object>'

Una vez que el objeto ha sido congelado, no se puede descongelar, no existe unFreeze. Si necesitamos modificar valores, podemos crear una copia del objeto con ayuda del método keys de la siguiente manera:

var descongelado = {};

Object.keys(person).forEach(function(key) {
  descongelado[key] = person[key];
});

descongelado.edad = 24;

console.log(descongelado); // Object {nombre: "Miguel", edad: 24}

seal

Este método es similar a freeze, no podemos agregar ni eliminar propiedades, pero si podemos modificar las existentes.

Object.seal(descongelado);

descongelado.edad = 25;

console.log(descongelado); // Object {nombre: "Miguel", edad: 25}

descongelado.pelo = 'chino'; // Uncaught TypeError: Can't add property pelo, object is not extensible