JavaScript, nesne yönelimli programlamayı diğer dillerin çoğundan oldukça farklı şekilde ele alır. Her şey kurucularla başlar.
JavaScript yerleşik bir dildir, ancak yalnızca ES6’da klasik nesne yönelimli programlama (OOP) desteği ekledi. JavaScript, sınıf bildirimleri gibi özellikler ekleyene kadar, OOP’yi daha az bilinen prototip tabanlı bir paradigma kullanarak ele aldı. Ancak her iki yaklaşımla da nesne tabanlı özellikleri kullanan karmaşık uygulamalar oluşturabilirsiniz.
Prototip JavaScript’teki bir yapıcı, diğer işlevlere çok benzer. Temel fark, nesneler oluşturmak için bu yapıcı işlevini kullanabilmenizdir.
JavaScript’te Yapıcı Nedir?
Yapıcılar, nesne yönelimli programlamadaki temel kavramlardan biridir . Yapıcı, bir nesnenin örneğini oluşturmak için kullanabileceğiniz bir işlevdir. Oluşturucu, yeni bir nesne oluşturmanın yanı sıra, kendisine ait olacak özellikleri ve davranışları da belirtir.
Yapıcı Sözdizimi
function NameOfConstructor() {
this.property1 = “Property1”;
this.property2 = “Property2”;
this.property3 = “Property3”;
}
Temelde diğer herhangi bir işlev gibi olduğu için function anahtar sözcüğüyle bir yapıcı oluşturabilirsiniz . Ancak, yapıcılar aşağıdaki sözleşmelere uyar:
- Bunları diğer işlevlerden ayırmak için, kurucunuz için büyük harfle başlayan bir ad kullanın.
- Yapıcılar this anahtar sözcüğünü farklı şekilde kullanır. Bir kurucu içinde, bu , kurucunun yaratacağı yeni nesneyi ifade eder.
- JavaScript işlevlerinin aksine, yapıcılar değer döndürmek yerine özellikleri ve davranışları tanımlar.
Yeni Nesneler Yaratmak için Bir Yapıcı Kullanma
JavaScript’te bir nesne oluşturmak için bir kurucu kullanmak kolay bir iştir. İşte onu takip eden bir çağrı ile basit bir kurucu:
function Student() {
this.name = “Gloria”;
this.gender = “Female”;
this.age = 19;
}
let femaleStudent = new Student();
Bu örnekte, FemaleStudent , Student yapıcısından oluşturulan bir nesnedir . İşlevi yapıcı olarak çağırmak için new anahtar sözcüğünü kullanın. Bu anahtar kelime, JavaScript’e yeni bir Student örneği oluşturmasını söyler . Bu işlevi new anahtar sözcüğü olmadan çağırmamalısınız, çünkü yapıcı içindeki bu , yeni bir nesneye işaret etmeyecektir. İnşaattan sonra, FemaleStudent , Student’ın tüm özelliklerine sahiptir . Bu özelliklere başka herhangi bir nesnede yaptığınız gibi erişebilir ve bunları değiştirebilirsiniz.
JavaScript Oluşturucuları Hakkında Bilinmesi Gereken Önemli Şeyler
Yapıcılarla çalışmak çok yorucu olabilir ve aynı zamanda kolay bir iş olabilir. İşte herhangi bir geliştiricinin yapıcılarla çalışma hakkında bilmesi gereken bazı önemli şeyler.
Oluşturucuları Bağımsız Değişkenlerle Kullanma
Bir kurucuyu argümanları alacak şekilde genişletebilirsiniz. Duyarlı, esnek kod yazmak istiyorsanız bu çok önemlidir.
Bir yapıcıdan bir nesne oluşturduğunuzda, nesne yapıcıda bildirilen tüm özellikleri devralır. Örneğin, yukarıda oluşturduğunuz FemaleStudent sabit başlangıç değerleriyle name , cinsiyet ve yaş özelliklerine sahip olacaktır. Her özelliği manuel olarak değiştirebilseniz de, çok sayıda nesne kullanarak bir program yazıyorsanız, bu çok iş olurdu.
Neyse ki, JavaScript yapıcıları, diğer işlevler gibi parametreleri kabul edebilir. Öğrenci yapıcısını iki parametreyi kabul edecek şekilde değiştirebilirsiniz :
function Student(name, gender) {
this.name = name;
this.gender = gender;
this.age = 19;
}
Yukarıdakilerden oluşturulan tüm nesnelerin yaşı 19’a ayarlanacaktır. Tüm nesnelerin sahip olmasını istediğiniz bir özellik varsa, yapıcınızı bu şekilde tasarlayabilirsiniz.
Artık farklı argümanlar ileterek aynı yapıcıdan benzersiz nesneler tanımlayabilirsiniz.
Argümanlar, yapıcıları daha esnek hale getirir. Zaman kazandırırlar ve temiz kodu teşvik ederler.
Nesne Yöntemlerini Tanımlama
Yöntem, bir işlev olan bir nesne özelliğidir. Metotlar, nesnelerinize farklı davranışlar eklediğinden OOP’deki kodunuzu geliştirir. İşte bir örnek:
function Student(name, gender) {
this.name = name;
this.gender = gender;
this.age = 19 ;
this.sayName = function () {
return `My Name is ${name}`;
}
}
Yukarıdakiler, yapıcıya sayName işlevini ekler .
Diyelim ki bu kurucuyu, FemaleStudent değişkeninde sakladığınız bir nesne oluşturmak için kullanıyorsunuz . Daha sonra bu işlevi aşağıdaki kodla çağırabilirsiniz:
femaleStudent.sayName()
prototip
Daha önce, Student’ı tüm örneklerinin 19 değerinde bir age özelliğine sahip olacağı şekilde oluşturduk. Bu, oluşturduğunuz her Student örneği için yinelenen bir değişkene sahip olmanıza neden olur.
Bu tekrarı önlemek için JavaScript prototip kavramını kullanır. Bir kurucudan oluşturulan tüm nesneler, prototipinin özelliklerini paylaşır. Age özelliğini aşağıda gösterildiği gibi Student prototipine ekleyebilirsiniz :
Student.prototype.age = 19;
Bunu yaparak, tüm Student örnekleri age özelliğine sahip olacaktır . Prototip özelliklerini bildirmek , uygulamanızdaki yinelenen kodu azaltmanın bir yoludur. Kodunuzu mümkün olduğunca standart hale getirir.
Bir Prototip Özelliği Bir Nesne Olabilir
Prototip özelliklerini yukarıda açıklandığı gibi tek tek ekleyebilirsiniz. Ancak eklenecek birçok özelliğiniz varsa, bu elverişsiz olabilir.
Alternatif olarak, ihtiyacınız olan tüm özellikleri yeni bir nesnede tutabilirsiniz. Bunu yaparak, tüm özellikleri bir kerede ayarlayacaksınız. Örneğin:
Student.prototype = {
age: 19,
race: “White”,
disability: “None”
}
Prototipleri yeni bir nesneye ayarlarken yapıcı özelliğini ayarlamayı unutmayın .
Student.prototype = {
constructor: Student,
age: 19,
race: “White”,
disability: “None”
}
Hangi yapıcı işlevinin bir örneği oluşturduğunu kontrol etmek için bu özelliği kullanabilirsiniz.
Süper Tipler ve Kalıtım
Kalıtım , programcıların uygulamalarında hataları azaltmak için kullandıkları bir yöntemdir. Kendini tekrar etme (DRY) ilkesine bağlı kalmanın bir yolu .
Diyelim ki iki benzer prototip özelliğine sahip olan Öğrenci ve Öğretmen olmak üzere iki kurucunuz var.
Student.prototype = {
constructor: Student,
sayName: function () {
return `My Name is ${name}`;
}
}
Teacher.prototype = {
constructor: Teacher,
sayName: function () {
return `My Name is ${name}`;
}
}
Bu kurucuların her ikisi de sayName yöntemini aynı şekilde tanımlar. Bu gereksiz tekrardan kaçınmak için bir süper tip oluşturabilirsiniz.
function IndividualDetails(){};
IndividualDetails.prototype = {
constructor: IndividualDetails,
sayName: function () {
return `My Name is ${name}`;
}
};
Daha sonra sayName’i her iki kurucudan da kaldırabilirsiniz.
Özellikleri üst türden devralmak için Object.create() öğesini kullanın . Her iki kurucunun prototipini de süper tipin bir örneğine ayarladınız. Bu durumda, Öğrenci ve Öğretmen prototiplerini IndividualDetails örneğine ayarladık.
İşte burada:
Student.prototype = Object.create(IndividualDetails.prototype);
Teacher.prototype = Object.create(IndividualDetails.prototype);
Bunu yaparak Student ve Teacher , IndividualDetails üst tipinin tüm özelliklerini devralır .
Bu, süper türleri kullanarak OOP’de DRY uygulamasının nasıl yapılacağıdır.
Yapıcılar Oyunu Değiştirenler
Yapıcılar, JavaScript’in önemli bir bileşenidir ve işlevselliklerine hakim olmak, OOP JavaScript uygulamaları geliştirmek için çok önemlidir. Özellikleri ve yöntemleri paylaşan nesneler oluşturmak için bir kurucu kullanabilirsiniz. Nesne hiyerarşilerini tanımlamak için kalıtımı da kullanabilirsiniz.
ES6’da klasik nesne yönelimli sınıfları tanımlamak için class anahtar sözcüğünü kullanabilirsiniz. JavaScript’in bu sürümü ayrıca bir yapıcı anahtar sözcüğünü de destekler.