Twoje pierwsze dwa przykłady są całkowicie równoważne:
MyClass.prototype = new Object(); // empty object
MyClass.prototype = {}; // empty object
Twój trzeci przykład nie jest ważne, ponieważ jesteś przypisywanie do MyClass.prototype
odniesienie do konstruktor Object i jest to funkcja, a nie nowy obiekt.
Osobiście preferuję drugie, obiekt literal lub initialiser składnia:
MyClass.prototype = {prop1: 'value', prop2: 'value2'};
//...
MyClass.prototype.foo = 'bar';
MyClass.prototype.method1: function() {/**/};
Edit: W odpowiedzi na Twój komentarz, pusty obiekt dosłowne { }
zasadniczo równoważne new Object()
z tego powodu:
ProdukcjaLoga obiektu: {} jest oceniana w następujący sposób:
- Utwórz nowy obiekt, jak przy wyrażeniu new Object().
- Wynik zwrotu (1).
Więcej szczegółów z sekcji 11.1.5 (Przedmiot Initialiser) z ECMAScript Language Spec (PDF).
Edit: Trzeci przykład nie przyniesie żadnych błędów, ale nie jest dobre na wszystko, na przykład można łatwo sprać funkcję konstruktora obiektu, jeśli potem przedłużyć ten MyClass.prototype:
MyClass.prototype = Object;
MyClass.prototype.foo = 'bar';
Object.foo === MyClass.prototype.foo; // true
możliwym duplikat (http://stackoverflow.com/questions/12592913/what-is-the-reason-to-use-the-new-keyword-here) – Bergi
@Bergi to pytanie ma więcej niż 4 lata. Ten, z którym się łączysz, ma 2 lata ... – moxn
Ta 1,5-letnia odpowiedź jest nadal ważna, a to pytanie wciąż można znaleźć za pomocą wyszukiwarki i linków. Powinien wskazywać na inne pomocne odpowiedzi ... – Bergi