ECMAScript Nesne Uygulaması

Nesnenin oluşturulması ve imhası, JavaScript'in çalışma sürecinde gerçekleşir, bu tarzın anlamını anlamak, tüm dilin anlaşılması için kritik öneme sahiptir.

Tanımlama ve örneklenme

Nesnenin oluşturulması, new anahtar kelimesinin ardından tanımlanan sınıf adı ile yapılmaktadır:

var oObject = new Object();
var oStringObject = new String();

İlk satırda, Object sınıfının bir örneği oluşturuldu ve bu örnek oObject değişkenine saklandı. İkinci satırda, String sınıfının bir örneği oluşturuldu ve bu örnek oStringObject değişkenine saklandı. Yapıcı fonksiyon parametresizse, parantezler zorunlu değildir. Bu yüzden yukarıdaki iki satır aşağıdaki gibi yeniden yazılabilir:

var oObject = new Object;
var oStringObject = new String;

Nesne referansı

Önceki bölümlerde, şunu tanıttıkReferans türü kavramıECMAScript'te, nesnenin fiziksel temsiline erişilemez, sadece nesnenin referansına erişilebilir. Nesne her oluşturulduğunda, değişkende saklanan her zaman o nesnenin referansıdır, nesne kendisidir.

Nesne imhası

ECMAScript'e atık depolama birimi toplayıcı programı (garbage collection routine) sahiptir, bu da nesneleri özel olarak imha etmek zorunda kalmadan belleği serbest bırakmamızı sağlar. Nesneye artık herhangi bir atıf yapılmadığında, bu nesnenin imha edildiği (dereference) denir. Atık depolama birimi toplayıcı programı çalıştırılırken, tüm imha edilen nesneler yok edilir. Her zaman ki bir fonksiyonun kodunu çalıştırdığında, atık depolama birimi toplayıcı programı çalışır, tüm yerel değişkenleri serbest bırakır ve bazı diğer belirsiz durumlar da atık depolama birimi toplayıcı programının çalıştığı olur.

Nesnenin tüm referanslarını null olarak ayarlamak, nesnenin zorunlu olarak ortadan kaldırılmasını sağlar. Örneğin:

var oObject = new Object;
// nesne ile bir şey yapın burada
oObject = null;

Değişken oObject null olarak ayarlandığında, ilk oluşturulan nesneye olan referans kalmaz. Bu, bir sonraki çöp belleği toplama programı çalıştığında nesnenin imha edileceği anlamına gelir.

Bir nesne kullanıldıktan sonra, onu ortadan kaldırarak belleği serbest bırakmak, iyi bir alışkanlıktır. Bu, artık erişilemeyen nesnelerin kullanılmayacağını ve bu nedenle program tasarım hatalarının önüne geçilmesini sağlar. Ayrıca, eski tarayıcılar (örneğin IE/MAC) tam bir çöp belleği toplama programına sahip olmadığı için, sayfa kapatıldığında nesneler doğru bir şekilde imha edilemeyebilir. Nesne ve tüm özelliklerinin ortadan kaldırılması, bellek kullanımının doğru olmasını sağlamanın en iyi yollarından biridir.

Dikkat:Nesnenin tüm referanslarını ortadan kaldırırken dikkatli olun. Bir nesne iki veya daha fazla referanssa sahipse, nesnenin doğru bir şekilde ortadan kaldırılmasını sağlamak için tüm referanslarını null olarak ayarlamak gerekir.

Erken bind ve geç bind

Bağlama (binding), nesnenin arayüzünü ve nesne örneğini bir araya getiren yöntem anlamına gelir.

Erken bind (early binding), nesnenin özelliklerini ve yöntemlerini önceden tanımlamak ve bu sayede derleyici veya yorumlayıcı'nın önceden makine kodunu dönüştürmesini sağlamak anlamına gelir. Java ve Visual Basic gibi dillerde, erken bind kullanıldığında, geliştirme ortamında IntelliSense (yani geliştiricilere nesnelerdeki özellik ve yöntem listelerini sağlayan bir özellik) kullanımı mümkün olur. ECMAScript güçlü türdendir, bu yüzden erken bind desteklenmez.

Diğer yandan, geç bind (late binding) terimi, derleyici veya yorumlayıcı'nın çalışma öncesi nesnenin türünü bilmediği anlamına gelir. Geç bind kullanıldığında, nesnenin türünü kontrol etmek gerekmez, sadece nesnenin özellik ve yöntemlerini destekleyip desteklemediğini kontrol etmek yeterlidir. ECMAScript'teki tüm değişkenler geç bind yöntemiyle kullanılır. Bu, büyük miktarda nesne işlemi yapma yeteneğini, herhangi bir ceza olmadan sağlar.