ECMAScript Nesne Alanı
- Önceki Sayfa Nesne Türleri
- Sonraki Sayfa Sınıf veya nesne tanımlayın
Alan, değişkenlerin geçerli olduğu aralık demektir.
Genel, özel ve koruma alanları
Kavram
Geleneksel yönelimli nesne tabanlı programlama tasarımında, genel ve özel alanlara odaklanılır. Genel alanlardaki nesne özellikleri nesnenin dışından erişilebilir, yani geliştiricinin nesnenin bir örneğini oluşturduktan sonra, bu özellikleri kullanabilir. Özel alanlardaki özellikler ise sadece nesne içinde erişilebilir, yani bu özellikler dış dünyaya göre yok sayılır. Bu, bir sınıfın özel özellikleri ve metodlarını tanımladığında, bu özelliklerin ve metodların alt sınıflar tarafından da erişilemeyeceği anlamına gelir.
Koruma alanı, özel özellikler ve metodları tanımlamak için kullanılır, ancak bu özellikler ve metodlar aynı zamanda alt sınıflar tarafından da erişilebilir.
ECMAScript sadece genel alan
ECMAScript'te bu tür bir alanın tartışması neredeyse anlamsızdır, çünkü ECMAScript'te sadece bir tür alan vardır - genel alan. ECMAScript'teki tüm nesnelerin tüm özellikleri ve metodları genel olarak erişilebilir. Bu nedenle, kendi sınıfınızı ve nesnenizi tanımlarken son derece dikkatli olmanız gerekir. Unutmayın, tüm özellikler ve metodlar varsayılan olarak genel olarak erişilebilir!
Önerilen çözüm
Birçok geliştirici, ECMAScript'in bu tür sorununu çözen etkili bir özellik alanı modeli önermiştir.
Özel alan eksikliği nedeniyle, geliştiriciler hangi özelliklerin ve metodların özel olarak görülmesi gerektiğini belirlemiş bir anlaşma oluşturmuşlardır. Bu anlaşma, özellikler önüne ve sonuna alt çizgi eklenmesini gerektirir:
obj._color_ = "mavi";
Bu kodda, color özelliği özel olan bir özelliktir. Dikkat edin, alt çizgi özelliğin genel bir özellik olduğunu değiştirmek için değil, diğer geliştiricilere bu özelliğin özel olarak görülmesi gerektiğini söylemek içindir.
Bazı geliştiriciler, örneğin obj._color gibi özel üyeleri tek alt çizgi ile belirtmeyi de severler.
Statik etki alanı
Statik etki alanı tanımlanan özellik ve yöntemler her zaman aynı yerden erişilebilir. Java'da, sınıfların özellik ve yöntemlere sahip olabilmesi için nesne oluşturulmasına gerek yoktur, örneğin java.net.URLEncoder sınıfı, encode() fonksiyonu statik bir yöntemdir.
ECMAScript'te statik etki alanı yok
Doğru söylemek gerekirse, ECMAScript statik bir etki alanı yoktur. Ancak, inşa fonksiyonlarına özellik ve yöntemler sağlayabilir. Hatırlıyor musunuz, inşa fonksiyonları sadece fonksiyonlardır. Fonksiyonlar nesnelerdir, nesneler özellik ve yöntemlere sahip olabilir. Örneğin:
function sayHello() { alert("hello"); } sayHello.alternate = function() { alert("hi"); } sayHello(); // "hello" yazdırılır sayHello.alternate(); // "hi" yazdırılır
Burada, alternate() yöntemi aslında sayHello() fonksiyonunun bir yöntemidir. SayHello() fonksiyonunu, normal bir fonksiyon gibi çağırarak "hello" yazdırabilirsiniz, ayrıca sayHello.alternate() ile "hi" yazdırabilirsiniz. Buna rağmen, alternate() sayHello()'nun genel etkisi alanındaki bir yöntemdir, statik bir yöntem değildir.
Anahtar kelime this
this işlevi
ECMAScript'te ele alınması gereken en önemli kavramlardan biri olan anahtar kelime this, nesne yöntemlerinde kullanılır. Anahtar kelime this, her zaman yöntemi çağıran nesneye işaret eder, örneğin:
var oCar = new Object; oCar.color = "red"; oCar.showColor = function() { alert(this.color); }; oCar.showColor(); // "red" yazdırılır
Yukarıdaki kodda, anahtar kelime this,对象的 showColor() yönteminde kullanılmıştır. Bu ortamda, this, oCar ile eşittir. Yukarıdaki kodun işlevselliği ile aynı olan aşağıdaki kodlar da mevcuttur:
var oCar = new Object; oCar.color = "red"; oCar.showColor = function() { alert(oCar.color); }; oCar.showColor(); // "red" yazdırılır
this kullanma nedenleri
Bu nedenle this kullanılır? Çünkü nesne oluşturulurken, geliştiricinin hangi değişken adını kullanacağını belirleyemeyiz. Bu, aynı fonksiyonu birçok yerde yeniden kullanmanızı sağlar. Aşağıdaki örneği düşünün:
function showColor() { alert(this.color); }; var oCar1 = new Object; oCar1.color = "red"; oCar1.showColor = showColor; var oCar2 = new Object; oCar2.color = "blue"; oCar2.showColor = showColor; oCar1.showColor(); //Çıktı 'red' oCar2.showColor(); //Çıktı 'blue'
Yukarıdaki kodda, önce this ile fonksiyon showColor() tanımlanır, sonra iki nesne (oCar1 ve oCar2) oluşturulur, bir nesnenin color özelliği 'red' olarak ayarlanır, diğer nesnenin color özelliği 'blue' olarak ayarlanır. İki nesne de showColor özelliğine sahip olurlar ve bu özellikler, orijinal showColor() fonksiyonuna işaret ederler (burada adlandırma sorunu yok çünkü biri genel fonksiyon, diğeri ise nesnenin özelliğidir). Her bir nesnenin showColor() metodunu çağırıldığında, oCar1'nin çıktısı 'red', oCar2'nin çıktısı ise 'blue' olacaktır. Bu, oCar1.showColor() çağrıldığında, fonksiyon içindeki this anahtar kelimesi oCar1'ye eşit olduğundan, oCar2.showColor() çağrıldığında ise fonksiyon içindeki this anahtar kelimesi oCar2'ye eşit olduğundan budur.
Dikkat edin, nesnenin özelliklerine atıf yaparken mutlaka this anahtar kelimesi kullanmanız gerekir. Örneğin, aşağıdaki kodla showColor() metodu çalışmayacaktır:
function showColor() { alert(color); };
Değişkenlere nesne veya this anahtar kelimesi ile atıf yapılmazsa, ECMAScript onları yerel veya genel değişkenler olarak görecektir. Sonra bu fonksiyon, adı 'color' olan yerel veya genel değişkeni arayacaktır, ancak bulamayacaktır. Sonuç nasıl olacak? Fonksiyon, 'null' ifadesini uyarıda gösterecektir.
- Önceki Sayfa Nesne Türleri
- Sonraki Sayfa Sınıf veya nesne tanımlayın