İlk iki örnek tamamen eşdeğerdir:
MyClass.prototype = new Object(); // empty object
MyClass.prototype = {}; // empty object
Üçüncü örnek geçerli değil, sen MyClass.prototype
bir başvuru için atama beri Object yapıcı, ve bir işlev değil, yeni bir nesne.
Şahsen ikinci, nesneyi tercih literal veya initialiser sözdizimi:
MyClass.prototype = {prop1: 'value', prop2: 'value2'};
//...
MyClass.prototype.foo = 'bar';
MyClass.prototype.method1: function() {/**/};
Düzenleme: bu nedenle yorumunuza yanıt olarak, boş bir nesne değişmezi { }
esasen eşdeğer new Object()
:
üretim ObjectLiteral: {} şöyle değerlendirilir:
- Yeni Object() ifadesine göre yeni bir nesne oluşturun.
- Geri Sonuç (1). Daha fazla ayrıntı için
ECMAScript Language Spec (pdf) ait 11.1.5 bölümüne (Başlatıcı Nesne) kontrol edin.
Düzenleme: üçüncü örnek hataları üretmez, ancak daha sonra MyClass.prototype uzatsak kolayca Nesne yapıcı işlevini eğlenebiliriz örneğin, hiç iyi değil edecek:
MyClass.prototype = Object;
MyClass.prototype.foo = 'bar';
Object.foo === MyClass.prototype.foo; // true
olası yinelenen (http://stackoverflow.com/questions/12592913/what-is-the-reason-to-use-the-new-keyword-here) – Bergi
@Bergi bu soru 4 yaşından büyüktür. Bağlandığınız kişi 2 yaşında ... – moxn
1,5 yaşındaki cevap hala geçerli ve bu soru hala arama ve bağlantılar yoluyla bulundu. Diğer yararlı cevaplara işaret etmelidir… – Bergi