Sus primeros dos ejemplos son completamente equivalentes:
MyClass.prototype = new Object(); // empty object
MyClass.prototype = {}; // empty object
Su tercer ejemplo no es válido, ya que está asignando a la MyClass.prototype
una referencia a el constructor Object, y es una función, no un objeto nuevo.
yo personalmente prefiero el segundo, el objeto literal o initialiser sintaxis:
MyClass.prototype = {prop1: 'value', prop2: 'value2'};
//...
MyClass.prototype.foo = 'bar';
MyClass.prototype.method1: function() {/**/};
Editar: En respuesta a tu comentario, un objeto vacío literal { }
esencialmente equivalente a new Object()
debido a esto:
La producción ObjectLiteral: {} es evaluada de la siguiente manera:
- Crea un objeto nuevo como si tuviera la expresión Objeto nuevo().
- Resultado de devolución (1).
Para más detalles consultar la sección de 11.1.5 (Object initialiser) del ECMAScript Language Spec (pdf).
Editar: El tercer ejemplo no producirá ningún error, pero no es bueno en absoluto, por ejemplo, puede darle una paliza fácilmente la función constructora de objetos si se amplía después el MyClass.prototype:
MyClass.prototype = Object;
MyClass.prototype.foo = 'bar';
Object.foo === MyClass.prototype.foo; // true
posible duplicado de (http://stackoverflow.com/questions/12592913/what-is-the-reason-to-use-the-new-keyword-here) – Bergi
@Bergi esta pregunta tiene más de 4 años. El que enlazó tiene 2 años ... – moxn
La respuesta de 1,5 años sigue siendo válida, y esta pregunta aún se encuentra a través de la búsqueda y los enlaces. Debería apuntar a otras respuestas útiles ... – Bergi