Fonksiyonlar
* Değer atanmayan fonksiyon parametreleri undefined değerini alırlar.
* Argümanlar sadece tanımlandıkları fonksiyonda çalıştırılabilirler.Global blokta tanımlanan değişkenlere fonksiyonlardan erişilebilir.
* Farklı fonksiyon tanımlama şekilleri vardır örn ;
=> function islem() { }
=> var islem = function (a, b) {
return a + b;
}
Argümanlar
* arguments" değeri, Fonksiyonların parametre değerlerine sıralı olarak ulaşmamızı sağlayan bir dizidir.
var islem = function (a, b) {
return arguments[0] + arguments[1];
}
document.write(islem(3, 5));
//sonuç : 8
Fonksiyonlar için method ve değişken tanımlamak
var islem = function () {
this.aciklama = "Bu bir fonk. açıklamasıdır";
this.toplama = function (a, b) {
return a + b;
}
this.cikarma = function (c, d) {
return c - d;
}
}
var islemler = new islem();
var x = islemler.toplama(10, 20);
var y = islemler.cikarma(20, 12);
document.writeln("toplama sonucu : " + x); // sonuç : 30
document.writeln("çikarma sonucu :" + y); // sonuç : 8
document.writeln("açiklama : " + islemler.aciklama); // çıktı : Bu bir fonk. açıklamasıdır
prototype kullanımı
Oluşturmuş olduğumuz işlem objesine yeni bir method eklememiz gerektiğini düşünelim ; şöyle bir kod yazabiliriz ;
islem.bolme = function (a, b) {
return a / b;
}
islem.bolme(10, 2); diyerek ben bu eklediğim methodu kullanabilirim ancak bu yeni yazdığım methodun içerisinde islem objesine ait değişken ve methodlara erişim sağlayamam! ayrıca islem objesinden yeni bir örnek oluşturduğumda , bu yeni eklediğim methoda erişimde sağlayamam.Açıkcası ; bir objeye prototype özelliği ile eklediğin her yeni özellik ve method , o nesnenin tüm instance'ları (kopyaları) içinde geçerli olmaktadır.
islem.prototype.bolme = function (c, d) {
return (c / d) + " aciklama " + this.aciklama;
}
var islemler = new islem();
document.write(islemler.bolme(10, 2));
call ile kalıtım
Fonksiyonları birbiri üzerine inşa etmek yani bir bakıma oop'deki inheritance'i js'de uygulamak için kullanılır.
var insan = function (ad, soyad, cinsiyet, uyruk) {
this.ad = ad;
this.soyad = soyad;
this.cinsiyet = cinsiyet;
this.uyruk = uyruk;
}
insan.prototype.kos = function (kosmaEfekti) {
document.write(kosmaEfekti);
}
var calisan = function (ad, soyad, cinsiyet, uyruk, maas) {
this.maas = maas;
insan.call(this, ad, soyad, cinsiyet, uyruk);
// this anah.kelimesi parametrelerin calisan fonksiyonundan gönderildiğini ifade ediyor.
}
calisan.prototype = insan.prototype;
var ogretmen = function (ad, soyad, cinsiyet, uyruk, maas, ogrenciSayisi) {
this.ogrenciSayisi = ogrenciSayisi;
calisan.call(this, ad, soyad, cinsiyet, uyruk, maas);
}
ogretmen.prototype = calisan.prototype;
var ahmet = new insan("ahmet", "çalik", "erkek", "tc");
var gaye = new calisan("gaye", "portakal", "kadın", "tc", "2000");
var yurdagul = new ogretmen("yurdagul", "or", "kadın", "tc", "1700", "30");
document.write(ahmet.ad + " " + ahmet.soyad + " " + ahmet.cinsiyet + " " + ahmet.uyruk);
ahmet.kos(" dambili dambili");
document.write("<br/>");
document.write(gaye.ad + " " + gaye.soyad + " " + gaye.cinsiyet + " " + gaye.uyruk + " " + gaye.maas);
gaye.kos(" pompili pompili");
document.write("<br/>");
document.write(yurdagul.ad + " " + yurdagul.soyad + " " + yurdagul.cinsiyet +
" " + yurdagul.uyruk + " " + yurdagul.maas + " " + yurdagul.ogrenciSayisi);
yurdagul.kos(" tumbala tumbala");
prototype'i insan objesine yazdığım methodu , diğer oluşturduğum sınıflarında kullanabilmesi için kullandım,
bir prototype methodunu veya değişkenini başka bir objenin prototype'ine aktararak ,2 obje tarafından paylaşılmasını kolaylıkla sağlayabiliriz.