Yok hocam Javascript. Javasrcriptteki inheritance mekanizmasi class based dillerden farkli bayagi.

Abi sorun biraz karmaşık geldi, yanlış anlamış olabilirim. Eğer problemi doğru anladıysam aşağıda yazdıklarım anlamana yardımcı olur diye düşünüyorum. Şimdi object ve constructor farkını doğru anladığından emin misin? Sanki bu ikisini birbirine karıştırıyormuşsun gibi geldi bana. Javascript'te C# veya Java gibi class yazıp ondan object oluşturma gibi bir yapı yok. Javascript'te direk Object constructor methodunu çağırarak nesne oluşturuyorsun. Yani "Object " bir obje değil, bir objenin constructor methodu (yani typeof çağrısının sonucunun fonksiyon olması normal). Javascript'teki tüm nesnelerin inherite edildiği nesne olan Object nesnesi, Object constructor'ına, prototype nesnesine ve getPrototypeOf gibi fonksiyonlara sahip. Everyone sees just what they want to see.

Abi sorun biraz karmaşık geldi, yanlış anlamış olabilirim. Eğer problemi doğru anladıysam aşağıda yazdıklarım anlamana yardımcı olur diye düşünüyorum. Şimdi object ve constructor farkını doğru anladığından emin misin? Sanki bu ikisini birbirine karıştırıyormuşsun gibi geldi bana. Javascript'te C# veya Java gibi class yazıp ondan object oluşturma gibi bir yapı yok. Javascript'te direk Object constructor methodunu çağırarak nesne oluşturuyorsun. Yani "Object " bir obje değil, bir objenin constructor methodu (yani typeof çağrısının sonucunun fonksiyon olması normal). Javascript'teki tüm nesnelerin inherite edildiği nesne olan Object nesnesi, Object constructor'ına, prototype nesnesine ve getPrototypeOf gibi fonksiyonlara sahip. Doğru anlamışsın. Aradığı cevap bold olan yer.

Javascript değil java olmasın? Tarikat-ı Aliyyeyi Tahribadiyye

Arkadaslar Merhabalar, Javascript'in inheritance mekanizmasi ile ilgili olarak bir kac sorum olacakti. Her objenin gizli olarak kendi prototype'ina bagli oldugunu biliyorum. Istenilen method veya elemanlarin bu prototype zinciri taranarak bulundugunu da biliyorum. Benim Javascript ile kafamin karistigi nokta surada: Javascriptte aslinda constructorlar birer fonksiyon. Bu fonksiyonlar "new" sozcugu ile cagirildigi zaman birer obje yaratiyorlar. Bu fonksiyonlar istenirse kullanici tarafindan yaziliyor istenirse built-in fonksiyonlar kullaniliyor. Javascript'te bulunan Object , Array ve Date gibi builtin objeler kendi methodlarina sahipler. Eger console'da typeof veya benzeri birsey yaptiysaniz gelen cevabin function oldugunu goreceksiniz. Eger typeof(Object yazilirsa bu sefer gelen cevap object seklinde oluyor. Buraya kadar zaten problem yok. Demek ki Object'in kendisi de bir constructor fonksiyon. Peki Object yazip yanina nokta koydugumda onume bir cok secenek geliyor. Bunlar arasinda prototype objesinin kendisi, Object. prototype icerisinde tanimli olmayan ama sadece Object icerisinde tanimli olan bircok fonksiyon, birde gizli ozellikler var, mesela getPrototypeOf veya isProtoTypeOf gibi. Bunlar Object. prototype objesine bagli degiller. Burdan gordugum kadariyla aslinda constructor fonksiyonlar kendisi de aslinda birer obje. Object constructor fonksiyonu kendisi prototype diye ayri bir obje tutuyor ve bu objenin elemanlari Javascript'te olusturulan diger objeler tarafindan inherit ediliyor fakat sadece Object'in kendisi (dikkat edin new Object degil) hic bir obje tarafindan inherit edilmiyor. Buna bir aciklamaniz varsa cok yardimci olursunuz. Tesekkurler,

Ornekler ustunden gidelim. function deneme Constructor fonksiyon diye belirttigim sey buydu. Sonucta bir fonksiyon tanimi. Bunu mesela, var obj = new deneme ; seklinde cagirirsak obj degiskeni olusturulan yeni bir objeye baglaniyor. Bu arada deneme adli fonksiyon parantezlerle cagirmadan yanina kendi icersindeki methodlara yada propertylere baktigimizda prototype'i goruyoruz. new deneme yazarak yarattigimiz obj objesi deneme. prototype'in ozelliklerini inherit ediyor, direkt olarak deneme'nin kendisinin degil. Sanirim ayni sey Object. prototype'ta da var. Yani yeni uretilen objeler inherit edecegi seyleri Object'ten degilObject. prototype'tan inherit ediyorlar. Normalde var x = new Object diye birsey yaptigimizda x' e ait herhangi bir prototype gozukmuyor console'da. Fakat eger sadece Object'in elemanlarini incelersek icerisinde bircok tanimli fonksiyon bir de Object. prototype'i goruyoruz. O zaman yeni uretilen objeler aslinda ozelliklerini Object'in kendisinden inherit etmemis oluyorlar, onun yerine Object. prototype'in methodlarini veya ozelliklerini inherit ediyorlar benim anladigim kadariyla. deneme orneginden yola cikarak diyorum ki o zaman Object in kendisi de yukaridaki gibi bir fonksiyon. Javascript run-time environment anladigim kadariyla yukaridaki gibi her constructor fonksiyona birde prototype objesi bagliyor?Dogru muyum?