Ваши первые два примера полностью эквивалентны:
MyClass.prototype = new Object(); // empty object
MyClass.prototype = {}; // empty object
Ваш третий пример недопустим, поскольку вы присваиваете MyClass.prototype
ссылку на конструктор Object , и это функция, а не новый объект.
Я лично предпочитаю второй, объект литерал или инициализатор синтаксис:
MyClass.prototype = {prop1: 'value', prop2: 'value2'};
//...
MyClass.prototype.foo = 'bar';
MyClass.prototype.method1: function () {/**/};
Редактировать: В ответ на ваш комментарий, пустой литерал объекта { }
по существу эквивалентен new Object()
из-за этого:
Production ObjectLiteral: {} есть
оценивается следующим образом:
- Создайте новый объект как будто с помощью выражения new Object ().
- Результат возврата (1).
Подробнее см. В разделе 11.1.5 (Инициализатор объектов) спецификации языка ECMAScript (pdf).
Редактировать: Третий пример не будет выдавать никаких ошибок, но он совсем не годится, например, вы можете легко заглушить функцию конструктора Object, если потом расширете MyClass.prototype:
MyClass.prototype = Object;
MyClass.prototype.foo = 'bar';
Object.foo === MyClass.prototype.foo; // true