JavaScript’teki Prototip Yapısı ve Diğer Programlama Dillerinden Farkları

Hamdi Yılmaz
3 min readMar 19, 2023

JavaScript, nesne tabanlı bir programlama dilidir ve diğer birçok programlama dili gibi, nesneler ve sınıflar kullanır. Ancak, JavaScript’in prototip tabanlı nesne yönelimli programlama modeli, diğer programlama dillerindeki nesne yönelimli programlama modellerinden farklıdır. Bu makale, JavaScript’in prototip yapısı ile diğer programlama dilleri arasındaki farkları ele alacaktır.

Prototip Yapısı Nedir?

JavaScript’te, nesneler prototipler tarafından tanımlanır. Prototipler, nesnelerin sahip olduğu özelliklerin bir koleksiyonudur ve başka bir nesnenin prototipi olarak kullanılabilirler. Bir nesne, prototipindeki özellikleri miras alır ve kendi özellikleri ile birleştirir.

Bu, diğer programlama dillerindeki sınıf ve nesne yapısından farklıdır. Örneğin, Java veya C# gibi dillerde, bir sınıf, nesnelerin kalıtımını tanımlayan bir şablondur. Nesne oluşturmak için bu şablonu kullanırsınız ve nesne, şablonun bir örneği olarak oluşturulur. Nesneler, kalıtım yoluyla birbirlerinden türetilirler ve bir sınıfın özellikleri, sınıfın tüm örneklerinde aynıdır.

JavaScript’teki Prototip Yapısı Nasıl Çalışır?

JavaScript’te, her nesnenin bir prototipi vardır. Bu prototip, nesnenin sahip olduğu özellikleri içerir ve diğer nesnelerin prototipi olarak kullanılabilir. Nesneler, prototiplerinden özelliklerini miras alırlar ve kendi özellikleri ile birleştirirler.

Örneğin, aşağıdaki kodda bir “Person” nesnesi tanımlanmıştır:

var Person = {
name: "John",
age: 30,
sayHello: function() {
console.log("Hello, my name is " + this.name);
}
};

Bu nesnenin bir prototipi vardır, ve bu prototip JavaScript’te “Object.prototype” olarak adlandırılır. Bu nesne, JavaScript’teki her nesnenin prototipi olarak kullanılır. Bu, “Person” nesnesinin prototipinin, “Object.prototype” nesnesi olduğu anlamına gelir.

console.log(Object.getPrototypeOf(Person) === Object.prototype); // true

Nesneler, prototiplerinden özelliklerini miras alabilirler. Örneğin, aşağıdaki kodda bir “Employee” nesnesi tanımlanmıştır. Bu nesne, “Person” nesnesinin özelliklerini miras alır ve “Employee” nesnesi özel özelliklerini ekler.

var Employee = Object.create(Person);
Employee.employeeId = 1234;
Employee.getEmployeeId = function() {
console.log("Employee ID is " + this.employeeId);
};

console.log(Employee.name); // "John"
console.log(Employee.age); // 30
Employee.sayHello(); // "Hello, my name is John"
Employee.getEmployeeId(); // "Employee ID is 1234"

Bu kodda, “Employee” nesnesi “Person” nesnesinin prototipi olarak tanımlanmıştır. “Employee” nesnesi, “Person” nesnesinin özelliklerini miras alır ve “employeeId” ve “getEmployeeId” özelliklerini ekler. “Employee” nesnesinde “name” ve “age” özellikleri olmadığı için, “Person” nesnesinin özelliklerini miras alır ve doğru sonuçları döndürür.

JavaScript’teki Prototip Yapısı ile Diğer Programlama Dillerindeki Sınıf Yapısı Arasındaki Farklar

JavaScript’teki prototip yapısı, diğer programlama dillerindeki sınıf yapısından farklıdır. Bazı farklılıklar şunlardır:

1. JavaScript’te, nesneler ve prototipler ayrıdır. Diğer programlama dillerinde, sınıflar ve nesneler aynı şeydir. Sınıflar nesnelerin kalıtımını tanımlayan şablonlar olarak kullanılırken, JavaScript’te prototipler nesnelerin özelliklerinin tutulduğu koleksiyonlardır.

2. JavaScript’te, prototipler zinciri vardır. Her nesne bir prototipe sahiptir ve bu prototip zincirinin en tepesinde “Object.prototype” vardır. Diğer programlama dillerinde, sınıf hiyerarşisi vardır ve sınıflar birbirlerinden türetilirler.

3. JavaScript’te, nesneler çalışma zamanında değiştirilebilir. Prototipler ve nesneler dinamik olarak değiştirilebilir, yeni özellikler eklenebilir veya mevcut özellikler değiştirilebilir. Diğer programlama dillerinde, sınıflar derleme zamanında tanımlanır ve sınıf yapısı çalışma zamanında değiştirilemez.

4. JavaScript’te, nesnelerin özellikleri dinamik olarak eklenir veya silinir. Diğer programlama dillerinde, sınıf yapısı derleme zamanında tanımlanır ve sınıfın özellikleri çalışma zamanında değiştirilemez.

5. JavaScript’te, nesneler “instanceof” operatörü kullanılarak kontrol edilir. Diğer programlama dillerinde, “instanceof” operatörü yerine “is-a” ve “has-a” ilişkileri kullanılır.

Sonuç olarak, JavaScript’teki prototip yapısı, diğer programlama dillerindeki sınıf yapısından farklıdır. Bu farklılıklar, JavaScript’in dinamik ve esnek doğasına katkıda bulunur ve JavaScript kodunun anlaşılmasını ve değiştirilmesini kolaylaştırır. Örneğin, bir nesneye yeni bir özellik eklemek için sadece “obj.property = value” yapısı kullanılabilir. Aynı şekilde, bir nesnenin özelliğinin değeri, “obj.property” kullanılarak kolayca değiştirilebilir. Bu kolaylık ve esneklik, JavaScript kodunun daha hızlı ve etkili bir şekilde geliştirilmesine olanak tanır.

JavaScript’teki prototip yapısı, ayrıca nesneler arasında paylaşılan özellikleri ve işlevleri tekrar tekrar tanımlamaktan kaçınarak bellek kullanımını optimize etmeye yardımcı olur. Bu, büyük ve karmaşık uygulamalarda performansı artırabilir.

JavaScript’teki prototip yapısı, öğrenmesi biraz zor olsa da, esnekliği ve gücü ile JavaScript kodunun geliştirilmesini ve optimize edilmesini kolaylaştırır. Özellikle, modern JavaScript sürümleri ile birlikte, ES6 sınıf tanımlama sözü ve diğer güncellemeler, JavaScript’teki prototip yapısını daha da geliştirmiştir.

--

--