JavaScript’te Constructor Fonksiyonları ve Prototipler Arasındaki Fark Nedir?
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.