JavaScript’te Constructor Fonksiyonları ve Prototipler Arasındaki Fark Nedir?

Hamdi Yılmaz
2 min readMar 20, 2023

JavaScript’te, nesnelerin özellikleri ve davranışları için constructor fonksiyonları kullanabiliriz. Constructor fonksiyonları, nesnelerin özelliklerini ve davranışlarını tanımlamak için kullanılan bir tür işlevdir.

Constructor fonksiyonlarına ayrıca metodlar da ekleyebiliriz. Ancak, her nesne örneği oluşturulduğunda, her bir metod da örneğe kopyalanır. Bu, bellek kullanımı ve performans sorunlarına neden olabilir.

Bunun yerine, prototip kullanarak metodları tanımlayabiliriz. Prototipler, nesnelere özellikler ve davranışlar eklemek için kullanılan özel bir özelliktir. Bir prototip, bir nesne oluşturulduğunda, tüm nesne örnekleri tarafından paylaşılır. Bu, bellek kullanımını azaltır ve performansı artırır.

Örneğin sınıf içinde metod oluşturmanın yanlış kullanımını gösteren bir örnek verebilirim:

class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}

sayHello() {
console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`);
}
}

Burada, Person sınıfında sayHello adında bir metod tanımladık. Ancak, her bir Person nesnesi örneği oluşturulduğunda, bu metod da nesne örneğine kopyalanır.

Örneğin, aşağıdaki kodda Person sınıfından iki nesne oluşturuyoruz:

const john = new Person('John', 30);
const jane = new Person('Jane', 25);

Bu kod, john ve jane nesneleri için ayrı ayrı sayHello metodlarını oluşturur. Bu, bellek kullanımını artırabilir ve performans sorunlarına neden olabilir.

Bu sorunu çözmek için, sayHello metodunu Person sınıfının prototipine eklemek daha iyi bir seçenek olacaktır. Böylece, sayHello metodunu yalnızca bir kere oluştururuz ve tüm Person nesneleri tarafından paylaşılır.

class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
}

Person.prototype.sayHello = function() {
console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`);
}

Bu şekilde, her Person nesnesi için ayrı ayrı metodlar oluşturmak yerine, sayHello metodunu prototip kullanarak Person sınıfına ekledik ve bellek kullanımını azalttık.

--

--