hai ví dụ đầu tiên của bạn là hoàn toàn tương đương:
MyClass.prototype = new Object(); // empty object
MyClass.prototype = {}; // empty object
Ví dụ thứ ba của bạn là không hợp lệ, vì bạn đang gán cho MyClass.prototype
một tham chiếu đến các nhà xây dựng Object, và nó là một chức năng, không phải là một đối tượng mới.
Cá nhân tôi thích thứ hai, đối tượng literal hoặc initialiser cú pháp:
MyClass.prototype = {prop1: 'value', prop2: 'value2'};
//...
MyClass.prototype.foo = 'bar';
MyClass.prototype.method1: function() {/**/};
Edit: Đáp lại bình luận của bạn, một đối tượng rỗng đen { }
về cơ bản tương đương với new Object()
vì điều này:
Mục tiêu sản xuất: {} là được đánh giá như sau:
- Tạo đối tượng mới như thể bằng biểu thức mới Object().
- Kết quả trả về (1).
Để biết thêm chi tiết kiểm tra 11.1.5 phần (Object initialiser) của ECMAScript Language Spec (pdf).
Edit: Ví dụ thứ ba sẽ không sản xuất bất kỳ lỗi nào, nhưng là không tốt chút nào, ví dụ bạn có thể dễ dàng clobber hàm xây dựng đối tượng nếu bạn mở rộng sau đó các MyClass.prototype:
MyClass.prototype = Object;
MyClass.prototype.foo = 'bar';
Object.foo === MyClass.prototype.foo; // true
trùng lặp có thể xảy ra (http://stackoverflow.com/questions/12592913/what-is-the-reason-to-use-the-new-keyword-here) – Bergi
@Bergi câu hỏi này là hơn 4 tuổi. Người bạn đã liên kết là 2 tuổi ... – moxn
Câu trả lời 1,5 tuổi vẫn hợp lệ và câu hỏi này vẫn được tìm thấy qua tìm kiếm và liên kết. Nó sẽ trỏ đến các câu trả lời hữu ích khác ... – Bergi