JavaScript ile OOP-6

26 Aralık 2014
Posted by Çağatay Yıldız
1554 Views

Bu yazımızda JavaScript ile oluşturduğumuz objenin private değişkenlerini modifiye edeceğiz. Öncelikle obje içerisinde nasıl private değişken tanımlanır ve nasıl bir davranış sergiler ona bakalım. Tanımladığımız değişkenlerden biri objemizin property si olacak diğeri ise objemiz içerisinde local değişken olarak tanımlanacak.

    function Ninja()
    {
        var ad = "Çağatay";
        this.ad = "Anıl";
        console.log(ad)
        console.log(this.ad)
    }

Ninja isimli objemdeki değişkenlerden “Çağatay” tanımladığım lokal değişken “Anıl” ise objeme bağlı property. Aynı isimle tanımlamamıza rağmen değişkenimiz ve property miz ayrı yerlerde saklanmaktadır. Böylelikle bu yöntemi kullanarak aynı isimle iki değişken tanımlayabildik.. Ekrandaki objemizden instance aldığımızda veya tetiklediğimizde ekrana sırayla “Çağatay” ve “Anıl” yazacaktır. Objemin içeriğini değiştiriyorum.

    function Ninja()
    {
        this.ad = "Çağatay";
        console.log(ad)
    }

Mevcut objemin içerisinde tanımladığım property i yakalamaya çalışıyorum. Bu durumda eğer objemden instance alırsam console ekranından “Uncaught ReferenceError: ad is not defined” şeklinde bir mesaj alacağım. Bu da mevcut instance durumunda değişkenlerin ayrı saklandığının göstergesi. Fakat Ninja objemi tetiklersem (Örneğin bir butonun onclick event yardımıyla tetiklediğimizi düşünelim veya kod bloğumuza Ninja(); satırını eklersek) ekrana “Çağatay” yazdığını göreceğiz. Burada fonksiyonumuz this.ad property sini bir değişken olarak algılamakta. Böylelikle Mevcut tetiklemelerle obje içerisinde bulunan property ler değişken olarak kullanılabilir. Gelelim aynı tetiklemeyle dışarıdaki global değişkenleri modifiye etmeye.

    var ad = "anıl"
    function Ninja()
    {
        this.ad = "Çağatay";
       
    }
    Ninja();
    console.log(ad)

Bu kod satırı çalıştığında ekrana “Çağatay” yazacaktır. Yani Ninja objemin tetiklenmesi ile içerideki property değişken olarak okunacak ve yukarıdaki değişkeni değiştirecektir. Eğer objemi bir fonksiyon olarak kullanmak yerine instance alırsam ekrana mevcut değişken “Anıl” yazacaktır. Büyük javascript projelerinde bu durum bazı kod karmaşalarına yol açabilmektedir. Bu durumu engellemek için “this instanceof” anahtar kelimesini kullanıyoruz.

    var ad = "anıl"
    function Ninja()
    {
        if (!(this instanceof Ninja)) return new Ninja();
        this.ad = "Çağatay";  
    }
    Ninja();
    console.log(ad)

Yukarıdaki kod satırı görüldüğü üzere eğer obje tetiklemesi instance alınmadan gerçekleşiyorsa objeden instance almakta böylelikle içerideki “Çağatay” değişkenini property olarak tanımaktadır. Bu şekilde kod bloğu çalıştığında ekrana “Anıl” yazacaktır. Bu yöntemle objenin ne şekilde tetiklendiğini obje içerisinde rahatlıkla kontrol edebiliyor ve ona göre işlemlerimizi gerçekleştirebiliyoruz.