Javascript Object Prototypes

Serhat Ayata
3 min readAug 15, 2021

Javascript nesneleri özellikleri ve metotlarını Object.prototype üzerinden alırlar. Constructor üzerinden instance oluşturursak her bir fonksiyon için bellekte yeni bir yer açılacaktır ve bu da bellekte fazladan yer kaplayacaktır.

Örnekler üzerinden gidecek olursak;

Constructor ile bir nesne oluşturalım.

Yukarıda oluşturduğumuz person1 (instance) içerisine bir özellik eklemek istersek bunu şu şekilde yapabiliyorduk.

Veya bir nesne içerisine metod eklemek istersek;

Yukarıda görüldüğü gibi fullName metodunu person1 nesnesinin içerisine ekledik. Eğer bunu yapıcı metod(constructor) için yapmak istersek;

Yukarıdaki işlemi gerçekleştirirsek sonuç olarak konsolda person undefined sonucunu görürüz. Eğer yapıcı metod(constructor) içerisine prototype üzerinden bir özellik eklemek istersek;

Bu yöntemle beraber eğer oluşturduğumuz person1 objesinin bir instance’ını person2 içerisine aktarmak istersek aşağıdaki gibi yapabiliriz. Burada __proto__ kullanılmasının sebebi eğer console.log(person2) yazarsak burada değerlerin Prototype içerisinde tutulduğu görülür. Bu nedenle console.log(person2.__proto__) kullandık. Bu konuya aşağıda tekrardan değineceğim.

Bunların dışında Object.defineProperty kullanarak constructor (yapıcı metod) içerisine aşağıda görüldüğü gibi özellik tanımlayabiliriz.

Object.defineProperty

Birden fazla özellik tanımlamak istersek ;

Object.defineProperties

Object.defineProperty sadece constructor için değil tüm nesnelerde kullanılabilir.

Object.defineProperty

Eğer constructor(yapıcı metod) hafızada nasıl fazladan yer kaplıyor görmek istersek;

Yukarıda görüldüğü gibi 3 adet tanımlı fonksiyon ve 3 adet instance mevcuttur. Bunlarla beraber toplam 9 adet fonksiyon gereksiz çalışmış olacaktır.

Bu problemden kurtulmak için prototype kullanırız…

Bu kullanım ile birlikte hafızada gereksiz yer kaplama problemin kurtuluruz…

Prototype her defasında oluşmuyor sadece referansı bellekte tutuluyor ve sadece ihtiyaç anlarında yer kaplıyor.

--

--