20 Aralık 2012 Perşembe

Caller


Javascript Caller Fonksiyonu 

Fonksiyonların nasıl çağrıldığını anlamak için, alt özellikleri olan "caller" kontrol edilir, eğer herhangi bir fonksiyon içinde çağrılmadıysa, "null"
değerini döndürür.Bu özellik "fonksiyonAdı.caller" biçiminde kullanılır:

>>> var merhaba = function(){
return merhaba.caller;
}
>>> merhaba()
null
>>> (function(){ return merhaba() })()
(function(){ return merhaba() })()

 Örnekte, "merhaba" adında, kendisini çağıran fonksiyonu döndüren bir fonksiyon oluşturduk.Global blokta çağırdığımız satırda "null" değer
dönerken, diğerinde fonksiyonun kendisi döndü.
Örnek olarak, yazdığımız fonksiyonun başka bir fonksiyon içinden çağrılmasını engelleyebiliriz;

>>> var merhaba = function(){
if(merhaba.caller!=null)
return "Bu fonksiyona başka bir fonksiyonun içinden erişemezsiniz."
return "Merhaba!"

 Dizi konusu gibi, ileride detaylıca inceleyeceğimiz konulardan biri de koşullar.Yukarıdaki örneğin ilk iki satırında, "merhaba.caller" değerini kontrol
ettik ve eğer "null" değilse, yani bir başka fonksiyonun içinden çağrı yapıldıysa, "Merhaba" yerine uyarı metni döndürdük."return" komutu verildikten
sonra yorumcunun fonksiyondan çıktığını hatırlayalım.

Bir sonraki yazı: Internet Explorer ve eval() İstisnası ...

15 Aralık 2012 Cumartesi

Prototype ve Browser Nesneleri


Prototype ve Browser Nesneleri

Javascript'in disable olmadığı durumları saymazsak, browserlar her HTML belgesinde javascript komutlarının çalışmasını sağlayan bir zemin
oluşturur.String,Number,Function,Array,Object nesneleri browser sözettiğimiz çekirdekte yer alan nesnelerden birkaçıdır.
Yazdığımız her sayı Number objesinden, her yazı String objesinden türer.Ve tahmin edeceğiniz gibi, bu değerlerin methodları, çekirdekteki
nesnelere bağlıdır.String nesnesinin methodlarından birini deneyelim:

>>> String
String()
>>> String.prototype.replace
replace()

 String nesnesinin prototype objesindeki replace fonksiyonuna erişip kontrol ettik.Şimdi de oluşturacağımız string değerinde replace methodunun
kullanımını inceleyelim:

>>> "Merhaba Dünya".replace
replace()
ECMAScript standartını kullanan dillerden biri de Actionscript'tir.Bu dil de String,Number gibi objeler oluşturur fakat geliştiricinin bu nesneleri
değiştirmesi kısıtlanmıştır. Neyse ki javascript için böyle bir durum söz konusu değil, browser nesnelerini dilediğimiz gibi değiştirebilmekteyiz.Örnek
olarak Number objesine bir method ekleyelim:

>>> Number.prototype.topla = function(sayiDegeri){
return this+SayiDegeri
}
Number nesnesinin iskeletine "topla" adında bir fonksiyon ekledik.Böylece, tüm sayılar için pratik bir toplama methodu yaratmış olduk, deneyelim:

>>> (4).topla(8)
12
>>> 4.0.topla(8)

Aklınıza şu soru gelmiş olmalı: Peki ondalık hanelerin nokta işaretleriyle methodlarınki karışmaz mı? Evet karışır.Bunun için sayılar parantez içine
alınır, veya ondalık hanesinden sonra method yazılır.
Örnekte gördüğünüz gibi, Number sınıfından türeyen sayı değerlerinin altında topla methodu kendiliğinden gelmektedir.
Küçük bir ipucu: prototype Obje tipindedir yani Object sınıfından türemiştir.Şimdi browser'ımızı heyecanlandıracak birkaç deneme yapalım:

>>> Object.prototype.deneme = "foo bar"
>>> "".deneme
"foo bar"

Örnekte, Object sınıfının iskeletine bir ekleme yaptık ve böylece Object sıfından türemiş olan tüm iskeletlere değişikliği uyguladık.Yani, deneme
fonksiyonu tüm iskeletlere eklendi.Bir sonraki satırda oluşturduğumuz string değeri kontrol ettik ve bu durumu doğruladık.
Protype'lar hakkında genel bilgi sahibi oldunuz.Obje türlerini inceledikten sonra prototype'lara tekrar dönüp deney yapmanızda fayda var.

Bir sonraki yazı: Caller