SORU
7 Mart 2011, PAZARTESİ


JavaScript: `yeni` değil kullanmak için Nasıl İyi bir Parça -

Crockford adlı kitabıJavaScript: İyi Parçaları, yapıcı işlevlerini gerektiğini söylüyor (sayfa 114)her zamanilk harfi (yani. isimleri verilecek Noktası), bu işlev adları ilk büyük harfle yazılması gerekirsadecekurucu fonksiyonlar (her şey küçük olmalı) ile kullanılabilir.

Bu Kongre bize yapıcı fonksiyonları ile new operator unutmadan önlemek yardımcı olur.

O söylemeye devam ediyor"[a]n daha iyi strateji başa çıkma new kullanmak için değil."

Benim soru, nasıl new kullanmadan JavaScript program mı?

  • new Object() ve edebi ile new Array() {} [] engelleyebiliriz.
  • new Number(), new Boolean() 0, true '' new String() engelleyebiliriz.
  • /pattern/ gibi bir şey new RegExp() engelleyebiliriz.

Nasıl new Date() kaçınırız.

Ve en önemlisi, nasıl kendi özel Nesneleri ile new kullanmaktan kaçının muyuz?

CEVAP
7 Mart 2011, PAZARTESİ


Crockford, Javascript yaptığı görüşmeler http://developer.yahoo.com/yui/theater/ üzerinde mevcut bulunan JS tarafından sağlanan olması gerektiği gibi nesne oluşturma bir fonksiyon için bir örnek kendisi verir

Ancak, YUİ(3) takım kendisi kullanır "yeni" ve BUNU takip tavsiyelerini (beri o Yahoo şef JS mimar (GÜNCELLEME: taşındı, ama bir açıklamaydı doğru zaman bu cevaptı aslında yazılı). "Akademik" düzeyde, olması GEREKEN dil tasarladığı "sağ" ve artıkları ile sınıf tabanlı kalıtım şeyler. bir daha bu beyanat, anlıyorum O (haklı olarak IMHO) JS çıktı bu şekilde çelişkili olduğunu söylüyor, prototip tabanlı ama "klasik sınıf" dil miras. bu tek bir şey ile

Ancak, JS ve kullanımı çok olduğu gibi"". yeni

Nesne oluşturma fonksiyonlarını burada bulabilirsiniz: http://javascript.crockford.com/prototypal.html

 if (typeof Object.create !== 'function') {
     Object.create = function (o) {
         function F() {}
         F.prototype = o;
         return new F();
     };
 }
 newObject = Object.create(oldObject);


EDİT: bu fonksiyonu Crockford en son sürümü kullanmak için Güncellendi - üç vardır.


GÜNCELLEMEHaziran 2015: tüm mevcut desteği (dahil. hangi tarayıcıları artık uzunca bir süre için Object.create(...) oldu Ve üzeri 9) YANİ, bu yüzden Crockford fonksiyonu kullanmak için ihtiyacı vardı.

Ancakeğer Object.create kullanırsanız çok bunu yapmaz emin olmalısınız çıkıyor: Bu fonksiyonu new Constructor()! kullanarak daha ÇOK yavaştır

Bir açıklama (V8 motoru için) http://mrale.ph/blog/2014/07/30/constructor-vs-objectcreate.html bakın, ve performans bir demo için http://jsperf.com/object-create-vs-crockford-vs-jorge-vs-constructor/62 bkz.

Başka bir sebep için değil, arkanı new Constructor(...) ES6 classes mutlaka bakın geniş kapsamlı evlatlık bile sadece basit bir nedenle en Javascript geliştiricileri gel sınıf tabanlı bir dil.

Ayrıca savunan bu makalede dışarı kontrol ediniçinObject.create: http://davidwalsh.name/javascript-objects-deconstruction

Gibi ya da değil, özellikle projeler, paylaşmak istediğiniz bir geniş insanlar (Uzay ve zaman (yani doğru ya da ne zaman, diğer insanların üzerinden alarak mı) başka nedenlerle kullanma new.

GÜNCELLEMEEylül 2015: kendim İçin, her şey için ES 2015 Javascript - ya io.js ve/veya Babil kullanarak kullanmaya başladım. Ben de kullanmak istemiyorumherhangi birProjelerim Javascript hariç new ankastre new Error(...) gibi. Çok daha güçlü işlevsel yaklaşım kullanmayı tercih ederim, tamamen nesne sistemi görmezden. [my-object].prototype this tamamen benim projelerden gitti. Uzun zamandır bu fikir ÇOK şüpheliydim nesneleri sadece iyi çalışır çünkü"". Ama çok isteksizce (io.js yeni bir proje başlangıcında bunu bir denemek sonra "" ve iki yıl harcadım. neden anlamıyorum tıkladım Tamam, tam olarak değil, bugün JS motorları ve donanımı çok daha stil için elverişli. Özellikle ES 2015, tavsiye veren bir fonksiyonel tarzı tamamen ücretsiz this class (yeni ES 2015 anahtar kelime veya bütün kavram, dayandığı kullanarak constructorFn.prototype) bir deneyin. Sen "bir daha oraya gitmeyeceksin söz ver - gönüllü olarak. tıkladığında ancak birkaç hafta sürebilir Çok daha kullanışlı ve güçlü.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Justin Case

    Justin Case

    3 EKİM 2011
  • khloe brooks

    khloe brooks

    25 Temmuz 2011
  • Vsauce

    Vsauce

    30 Temmuz 2007