SORU
28 ŞUBAT 2015, CUMARTESİ


JavaScript prototip sistemi klasik sınıf sistemi taklit ötesinde ne yapabilirim?

Prototip sistemi çok daha esnek geleneksel sınıf sistemi daha görünüyor, ama insanlar sözde içerik hissetmek gibi "uygulamaları geleneksel sınıf sistemi taklit eden", en iyi

function foo() {
  // define instance properties here
}

foo.prototype.method = //define instance method here

new foo()

İlk sistemi tüm esnekliği ile yapabileceğiniz başka şeyler de olmalı.

İlk sistem için kullanır taklit sınıfları dışında var mı? Ne tür şeyler prototip olamaz, ya da yok olan ne olabilir?

CEVAP
28 ŞUBAT 2015, CUMARTESİ


Prototip sistemi standart nesneler üzerinden miras uygulayarak metaprogramming, büyüleyici bir model sunuyor. Tabii ki, bu çoğunlukla belirli bir sözdizimi onları oluşturmak için gereken dil seviyesi değişmez yapılar olarak sınıfların olmadığı durumlarda, ama sınıfları kurulmuş ve basit bir kavramı ifade etmek için kullanılır. Düz nesneleri kullanarak, (ve her şeyi yapabilirsiniz) şimdi için yapabileceğiniz nesneler için yapabileceğiniz "sınıflar" - bu konuşma esnekliktir.

Bu esneklik, daha sonra genişletmek ve değiştirmek için bir sürü sınıflar programlı olarak kullanılan nesne-mutasyon JavaScript özellikleri dikkate alındığında, sadece kullanıyor

  • çoklu kalıtım için mixins ve özellikleri
  • prototip onlardan devralan nesne örneği sonra değiştirilebilir
  • üst düzey fonksiyonları ve Yöntem dekoratörler kolayca prototip oluşturma kullanılabilir

Elbette, prototip model kendisi sadece sınıfları uygulamak için daha güçlüdür. Bu özellikler kullanılan oldukça nadir olarak sınıf kavramı çok yararlı ve yaygın, bu yüzden gerçek güçleri prototip mirasını değil, iyi bilinen ve iyi optimize JS motorları :-/)

  • varolan nesnelerin prototip dışarı anahtarlama davranışlarını önemli ölçüde değiştirmek için kullanılabilir. (tam destek ES6 Reflect.setPrototypeOf ile geliyor)
  • birkaç yazılım mühendisliği desenler nesnelerle doğrudan uygulanabilir. Örnekler, özellikler, dinamik zincirleri de dahil olmak üzere chain of responsibilities flyweight pattern, oh, ve tabii ki prototype pattern.

    Bunun için iyi bir örnek, varsayılan seçenek nesneler olurdu. Herkes onları kullanarak oluşturur

    var myOptions = extend({}, defaultOptions, optionArgument);
    

    ama daha dinamik bir yaklaşım olurdu

    var myOptions = extend(Object.create(defaultOptions), optionArgument);
    

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • alexis gillis

    alexis gilli

    23 HAZİRAN 2011
  • ethr95awd

    ethr95awd

    8 Kasım 2006
  • UKF

    UKF

    2 Aralık 2009