
ES6 ile gelen Javascript’te class tanımlama ile OOP için daha okunaklı kod yazmaya yardımcı olmuş oldu. Typescript’te zaten bu yapı kullanılmakta ancak typescript’te OOP yazdığımız kodlar Javascript’e çevriliyor ve functionlar ile class tanımı ortaya çıkarılıyordu. Bununla birlikte typescript’te olan class tanımları bu şekilde class tanımlı olarak compile edilecektir.
Eğer bir nesne oluşturmak istersek bunu Constructor Function ile yapabiliyorduk. Aşağıdaki örnekte olduğu gibi;

Burada bir fonksiyonu nesne kurucusu olarak belirliyorduk ve nesne içerisindeki properties’leri tanımlıyorduk. Belleğin verimli kullanılması için ise constructor prototype özelliğine metotları yazıyor ve bununla bir nesne sınıfı oluşturuyorduk.
Class yapısında ise aynı fonksiyonda olduğu gibi 2 şekilde oluşturabiliriz.
- Class Declaration
- Class Expression
Burada class declaration ile oluşturacağız.

Burada ilk olarak new ile bir instance oluşturduk ve class oluşturulurken ilk olarak constructor işlemi gerçekleşir. Daha sonra this ile property bunun içerisine eklenir. Eğer class içerisinde bir metod tanımlamak istersek;

Burada yukarıdaki gibi class yapımızı oluşturduk ancak farklı olarak fullName fonksiyonu tanımladık. Daha önceki yazılarımda prototype’ten bahsetmiştim (Bkz. Javascript Object Prototypes). Eğer prototype ile bir properties eklemek istersek;

Eğer sınıf yöntemi tanımlamak istersek, function yazmadan doğrudan fonksiyon adı yazılarak ta tanımlanabilir. Yukarıda buna bir örnek verilmiştir.
Sınıflarda Getter ve Setter Fonksiyonlar

Sınıflarda Statik Metod Tanımlama
Sınıfın örneğini oluşturmadan kullanabileceğimiz ve sınıf örneği ile çağırılamayan statik metotlar tanımlayabiliriz.

Class içerisinde tanımlanan statik metodu sınıfla doğrudan ilgili ancak instance içerisinde bir işe yaramazlar. Sınıfın örneği oluşturulduğunda örneğin bir üyesi olmazlar. Statik yöntemler kullanılarak sınıfla ilgili bazı genel amaçlı yöntemleri sınıf tanımlaması içinde yaparız ve böylece bir bütünlük ve düzen sağlamış oluruz.
Statik yöntemlerin içinde constructor fonksiyonda yaptığımız gibi this kullanırsak bu instance’ı işaret etmez, global nesneye işaret eder bu durum web sayfalarında window nesnesinedir. Statik yöntemler içinde örneğin üyelerine this ile ulaşamayız.
Class Inheritance
Nesneye yönelik programlamada, bir sınıfın tüm özellik ve metodlarını yeni özellik ve yöntemlerle genişletmek üzere devralan bir sınıf tanımlama işlemine kalıtım (inheritance) denir.

Yukarıda oluşturduğumuz model sınıfı araba sınıfından özellikleri ve metodları devralır. Nesneye yönelik programlamada türetilen yeni sınıf içinden, türetildiği ana sınıfın yöntemlerini veya özelliklerini çağırmak gerekebilir. JavaScript sınıf bildirimlerinde bunu super ifadesi ile yaparız. super kullanımı this kullanımına benzer. this oluşturulan örneğin (nesnenin) kendisine, super ise türetildiği sınıfa işaret eder.

Javascript Sınıf İfadeleri (Class Expressions)
Sınıf tanımları fonksiyonlarda olduğu gibi ifade şeklinde de gösterilebilir.

Veya isim vererek de bir sınıf ifadesi yazabilirsiniz.

Bu tanımlamalar bir ifade (Expression) olduğu için sonuna ; konulmuştur.
Abstract Class Yapısı
Nesneye yönelik programlamada özet sınıflar, kendilerinden türetilecek başka sınıfların kullanacağı ortak yöntem ve özellikleri tanımlayan şablonlardır. Aynı özelliklere sahip birden çok sınıf varsa tekrardan aynı özellikleri yazmak yerine abstract class(özet sınıf) tanımlayarak buradan türetilmiş sınıflarda kodumuzun daha efektif olmasını sağlarız.

Yukarıda ilk olarak şablonumuzu oluşturduk. Daha sonra araba sınıfı ve list1,list2 sınıflarımızı oluşturduk. list1 ve list2 için özet sınıf içerisine araba sınıfı tanımlanır ve bununla birlikte p1 ve p2 örnekleri oluşturulur. Bu örneklerin içinde örnek sınıftan gelen Marka_aciklama metodu uygulanır.