java script etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
java script etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

6 Ağustos 2012 Pazartesi

Fonksiyonlar için method ve alt değişken tanımlamak

ECMAScript'te, fonksiyonların her biri diğer dillerde rastladığımız "class"'lara benzer, alt değerler tanımlanabilir ve new operatörüyle klonlanabilir.
Alt değer tanımlamak için, fonksiyonun içindeki "this" değerine erişilir.Alt değerler fonksiyon bloğunun dışında da tanımlanabilir. Bir örnek;
>>> var islemci = function(){
this.aciklama = "merhaba dünya!"
this.toplama = function()
{
return arguments[0]+arguments[1];
}
this.cikarma = function(sonuc)
{
return arguments[0]-arguments[1];
}
}
>>> var islem1 = new islemci();
>>> islem1.toplama(3,5);
8
>>> islem2.cikarma(3,5);
-2
islemci adında, toplama cikarma methodlarını içeren bir fonksiyon yarattık ve ardındaki satırda, islem1 tanıtıcısına yeni bir islemci objesini
atadık.Bu kez, az önce yazdığımız islemci objesinde, prototypeı kullanarak yeni bir alt method yaratalım;
 >>> islemci.prototype.carpma = function(){
return arguments[0]*arguments[1];
}
>>> var islem2 = new islemci();
>>> islem2.carpma(3,5);
15
 prototype Klonlanabilir nesnelerin ortak etki alanına sahip olmasını sağlayan bir değerdir.Eğer prototypeı kullanmadan tanımlama yaparsak, alt
methodu olduğumuz objenin etki alanına yani içerdiği değerlere erişemeyiz.Buna bir örnek verelim:
 >>> islemci.prototype.aciklamayiGoster1 = function(){
return this.aciklama;
}
>>> islemci.aciklamayiGoster2 = function(){
return this.aciklama;
}

 Görevleri islemci objesine ait aciklama değerini döndürmek olan etki alanları farklı, iki tane fonksiyon tanımladık.İlk tanımladığımız fonksiyonu
deneyelim:
 >>> islemci.aciklamayiGoster1()
"merhaba dünya!"
 Gördüğünüz gibi, islemci nesnesine prototype köprüsünden erişti ve içerdiği değerleri aldı.Diğerini deneyelim:
 >>> islemci.aciklamayiGoster2()
undefined
Tanımlanmamış değer döndürdü çünkü etki alanı kendisiydi.sadece kendi içindeki ve window altındaki değerlere ulaşabilirdi.Elbette bu problem
çözümsüz değil, call ve apply methodları fonksiyonların etki alanını belirlememizi sağlar.

...
Bir sonraki konu Dışarıdan Erişime Kapalı Özellikler










28 Temmuz 2012 Cumartesi

Fonksiyon Parantez Blokları


Fonksiyon tipindeki verilerin çalışmasını incelediğimiz örneklerde parantezlerin sağladığını görüyoruz.Parantezler işlevsel olarak pek çok konuda
fayda sağlasa da, pek çok zaman yazılan kodun daha anlaşılır olması için blok oluşturmada kullanılır.Önce ne gibi işlevlerde kullandığımıza
gözatalım.Birinci örnek matematiksel işlemlerde gruplama yaparken kullanılan parantezler üzerine:
>>> 1+2*3
7
>>> (1+2)*3
9
 İkinci örnek, sayısal değerlerin ondalık kısmıyla methodların karışması problemine parantez çözümü:
>>> 1.toString()
missing ; before statement
[Break on this error] 1.toString()
javascript: with ... (line 1)
>>> 1.0.toString()
"1"
>>> (1).toString()
"1"
Gelelim üçüncü örneğe.Ecmascript'te her fonksiyon bloğu parantezler içine alınabilir.Ve elbette, parantez içine alınmış kod bloğuna çalıştırma
komutu gönderilebilir.Bu yöntem daha sade ve temiz görünen kodlar yazmayı sağlar, çünkü fonksiyonu yazdıktan sonra tanıtıcıyı çağırmaya gerek
duyulmaz.

Klasik yöntemle yazılan bir fonksiyonun çağırma işlemiyle, parantez bloğunun kodlarını karşılaştıralım:
>>> var merhaba = function(){
return "Merhaba"
}
>>> merhaba();
Merhaba
>>> (var merhaba = function(){
alert("Merhaba");
})();
"Merhaba"
İlk örnekte fonksiyonu tanımladık ve ardından tanıtıcısını kullanarak çalıştırdık, ikinci örnekteyse fonksiyonu parantez bloklarının içine alıp
çalıştırdığımız için, tanıtıcıyla çağırma yaptığımız satıra gerek kalmadı.Tahmin edeceğiniz üzere, aslında parantez bloklarını kullanırken tanıtıcı
kullanılmayabilir:
>>> (function(){
alert("Merhaba");
})();
"Merhaba"

...

 Bir sonraki konu Argümanlar