JavaScript Temelleri

Bölüm 7

Function Nesne Sınıfı

Bölüm 7 Sayfa 2

7.5 - Function Nesne Sınıfına Fonksiyon Çalıştırma Ortamından Sağlanan arguments Nesnesi

Foksiyonlar tanımlandıktan sonra kendi kendine çalışmaz. Forksiyonların çalışmaları için çağrılmaları gerekir. Fonksiyonlar program adımları ile veya olay yöntecilerinin çağırması ile çalışırlar. Her çalışan fonksiyon, kendine üst düzey çalışma alanından bağımsız bir çalışma alanı açar ve fonksiyon çalışma alanı, çalışma alanları zincirinin bir halkası olarak üst düzey çalışma alanına bağlanır. Fonksiyon çalışma alanı, üst düzey çalışma alanına kapalıdır, fakat belirli koşullarla dış çalışma ortamı ile bilgi alışverişi yapabilir.

Fonksiyon çalıştırma ortamları, çalıştırdıkları fonksiyonlara arguments adında öntanımlı bir değişken sağlar. Bu değişken sadece fonksiyon içinde tanımlıdır.

Öntanımlı arguments değişkeninin değeri, Object sınıfından bir nesnedir . Bu nesne, dizi nesne sınıfı örneklerine benzer fakat, teknik olarak bir dizi değildir. Bunun nedeni, arguments nesnesinin, dizi sınıfı nesne örneklerinin push, pop gibi prototip özelliklerinden hiçbirine sahip olmamasıdır. Fakat, arguments nesnesi, dizi nesne örnekleri gibi, length özelliğine sahiptir. Ayrıca, arguments nesnesinin dizi nesne sınıfı örneklerinden başka bir farkı da, dizi nesne örneklerinde olmayan arguments .callee özelliğidir. Buna rağmen, arguments nesnesinin, dizi sınıfı nesne örnekleri (diziler) ile yadsınamayacak benzerliği, dizi elemanlarına sahip olmasıdır. Yani, arguments nesnesi, dizi nesnelerine benzeyen, fakat dizi nesnesi olmayan, sadece fonksiyon içinde geçerli olan, öntanımlı bir nesnedir. Burada, bu nesneyi incelemeye çalışacağız.

7.5.1 - arguments Nesnesinin length Özelliği

JavaScript fonksiyonları, inanılmaz bir esnekliğe sahiptir. Fonksiyonlar işlevlerine göre, argümanlarından yararlanabilirler. Fakat, istenilirse, tanımlandıkları argüman sayılarından az veya fazla sayıda argümanlarla çağrılabilirler. Argüman sayısı fazla ise gözardı edilir. Argüman sayısı tanımlanandan az ise, olayın sonucu foksiyonun yazılımına bağlıdır. Eğer az sayıda argümanla bir yanıt alınabiliyorsa, bu yanıt alınır. Eğer az sayıda argümanla bir sonuç üretilemiyorsa, program hata verir.

Fonksiyonlarda tanımlanmış argüman (parametre) sayısı, fonksiyon sınıfı nesne örneğinin length özelliğinin değeridir. Bu değere fonksiyon sınıfı nesne örneğinin adı (fonksiyon adı).length olarak erişilir. Fonksiyonun çağrılırken kullanıldığı güncel argüman sayısı ise, arguments .length özelliğinin değeridir. Bu iki değerin saptanması için örnek bir JavaScript programı ve ilişikli olduğu, uygulama sayfasında verdiği sonuç, aşağıda görülmektedir:

function fn1(s, t, u, v, y, z) {
sonuçYaz('Kullanılmış Argümanların Sayısı = ' , arguments.length, 'b7.5.1-uyg-1-sonuç-1');
sonuçYaz('Beklenen Argümanların Sayısı = ' , fn1.length, 'b7.5.1-uyg-1-sonuç-1');
}

fn2(1, 2, 3) { 
}
		

Program Sonucu :

7.5.2 - arguments Nesnesinin callee Özelliği

Bu özellik, anonim fonksiyonların kendi kendini çağırma (özyineleme) (rekürsiyon) özelliğini kazanabilmesi amacını taşımaktadır. Bu konuda bir JavaScript programı ve bağlantılı olduğu uygulama sayfasında verdiği sonuç incelenebilir:

7.5.3 - arguments Dizisi

Tekrar edelim, arguments bir dizi değil, sadece length özelliği olan dizi benzeri bir nesnedir. Bu dizi benzeri, argümansız olarak tanımlanan bir fonksiyonun argümanlı olarak çağrılmasına ve argümanlarına değer atanmasına olanak sağlar. Bu konuda bir JavaScript programı ve bağlantılı olduğu uygulama sayfasında verdiği sonuç aşağıda incelenebilir:

...
function toplam() {
var x = arguments[0], y = arguments[1], toplam = null;
toplam = x + y;
return toplam;
}

function toplamYap() {
			
var sonuç  = toplam(1, 2); 
sonuçYaz('Toplam = ', sonuç, 'b7.5.3-uyg-1-sonuç-1');
}
...
		

Program Sonucu :

Her ne kadar arguments dizisinin kullanımı ile eğlenceli ve ustaca görünümlü fonksiyonlar yaratılabiliyorsa da, genel kanı bu olanağın kullanılmamamsı gerektiği yönündedir. Bu şekilde yeniden okunması ve ileride bakım için deşifre edilmesi kolay olmayan fonksiyonlar yaratılacağı, böyle bir yönteme gerek olmadığı, genel olarak kabul edilmektedir. Bu nedelerle, Fonksiyonlarımızı, kullanılması gerektiği kadar argüman ile tanımlamalı ve tanımlandığı kadar argümanla da çağırmalıyız. Özyinelemeli olacak bir fonksiyon literali, isimsiz değil, isimli olarak bildirilebilir. Bu şekilde, arguments .callee özelliğine de gerek kalmayacaktır.

7.6 - Function Nesne Sınıfı Örneklerinin Özellikleri

Fonksiyon nesne sınıfı örneklerinin veri tipi 'function' olarak belirlenir. Bu konudaki sorgu işlemini gerçekleştiren bir JavaScript programı ve bağlantılı olduğu uygulama sayfasında verdiği sonuç, aşağıda görülmektedir:

...

function toplam(x, y){
var toplama = null;
toplama = x + y;
return toplama;
}

function tipKontrolü() {
			
sonuçYaz('Fonksiyon Sınıfı Nesne Örneklerinin Veri Tipi = ',  typeOf toplam, 'b7.6-uyg-1-sonuç-1');
sonuçYaz"'typeof toplam === 'function'",  typeOf toplam === 'function', 'b7.6-uyg-1-sonuç-2');
}

sayfaYüklendiktenSonraÇalıştır(tipKontrolü);
			

...
		

Program Sonucu :

Bu bilgiler, Simon Willison tarafından yazılmış olan, window.onload fonksiyonu sorgulama sistemini biraz daha geliştirebilme olasılığımız olabileceğinin işaretini vermektedir. Bunun için bir deneme yapabiliriz:

function sayfaYüklendiktenSonraÇalıştır(çalıştırılacakFonksiyon) {
var öncekiFonksiyon = window.onload;
if(typeof window.onload != 'function') {
window.onload = çalıştırılacakFonksiyon;
}
else {
window.onload = function() {
öncekiFonksiyon();
çalıştırılacakFonksiyon();
};
}
}
		

Bu fonksiyonun sorgulama satırını,

if(typeof window.onload != 'function')
		

dan,

if(typeof window.onload !== 'function')
		

satırına değiştirdikten sonra, fonksiyon yeniden JavaScript fonksiyon kitaplığına yerleştirilir ve denendikten sonra gayet iyi çalıştığı görülecektir.

Fonksiyon nesne sınıfı örneklerinin, başka hiçbir nesne sınıfı örneklerinde olmayan yeteneği, çağrılabilir (callable) olmalarıdır. Fonksiyonlar, çağrıldıklarında, yeni bir çalıştırma kapsamı açarlar ve { } arasında kalan fonksiyon bünyesinde bulunan kodlar çalıştırılır.

Fonksiyon nesne sınıfı örneklerinin, başka hiçbir nesne sınıfı örneklerinde olmayan bir başka yeteneği de, her fonksiyonun kendisine özgü bir prototype özelliği olmasıdır.

Aslında, her nesne sınıf örneğinin prototype özelliği, sınıfının prototype özelliğidir. Fonksiyon nesne sınıfı örneklerinde ise, her sınıf örneğinin kendine özgü ayrı bir prototype özelliği vardır. Bunun nedeni, her tanımlanan fonksiyonun bir yapılandırıcı fonksiyon olabilme olasılığıdır. Bu özelliğinin ayrıntıları aşağıda incelenmiştir.

Fonksiyon nesne sınıfı örneklerinin length özelliği, tanımlanırken belirtilen argüman sayısıdır. Bu özelliğinin de ayrıntıları aşağıda incelenmiştir.

7.6.1 - Function Nesne Sınıfı Örneklerinin length Özelliği

Fonksiyon sınıfı nesne örneklerinin length özelliği, tanımlanırken belirtilen argüman sayısıdır. Buna formal parametre listesi uzunluğu adı da verilir. Formal parametre listesi uzunluğuna,

fonksiyon nesne sınıfı örneği adı (fonksiyon adı).length 
		

olarak erişilir. Bu özelliğin kullanımına ait bir örnek JavaScript programı yukarıda verilmştir. Daha önce de belirtmiş olduğumuz gibi, fonksiyonlar, tanımlandıkları parametre sayısından daha az veya daha çok sayıda parametre ile çağrılabilirler. Bu durumda alınacak, sonuç, foksiyonun içeriğine bağlıdır. Fakat, bu konuda, oluşmuş kanıya göre , bu yöntem, yeniden izlenmesi zor yazılımlara neden olabileceğinden, kullanımı olumsuzdur. Burada tutulması gereken en temiz yol, fonksiyonların tanımlandıkları kadar parametre ile çağrılmaları ve karmaşık yazılım oyunlarından uzak durulması olacaktır.

7.6.1 - Function Nesne Sınıfı Örneklerinin prototype Özelliği

Fonksiyon nesne sınıfına ait her örneğin kendine özgü bir prototype özelliği olması sadece, fonksiyon nesne sınıfı örneklerine özgü bir ayrıcalıktır. Bunun nedeni, her fonksiyonun potansiyel bir yapılandırıcı fonksiyon olabilme olasılılığıdır. Yapılandırıcı fonksiyonlar, özgün bir nesne sınıfına ait yeni örneklerin daha kestirme olarak yapılandırılması için kullanılan fonksiyonlardır. Her fonksiyon sınıfı nesne örneğinin kendine özgü bir prototype özelliğinin olması, tüm JavaScript fonksiyonlarının nesne yapılandırılması için kullanılabileceğini belirtmektedir. Kullanıcılar kendi yapılandırıcı fonksiyonlarını tanımlayabildikleri için, kendi özel tanımlı nesne sınıflarını da tanımlayabilirler.

Fonksiyon sınıfı nesne örnekleri, fonksiyon olarak adlandırılırlar. Fonksiyonların prototypeözellikleri, fonksionlarla değil kullanıcı tanımlı nesnelerle ilgilidir. Her fonksiyon, yapılandırıcı fonksiyon olarak kulanılabilir. Her yapılandırıcı fonksiyon yeni bir nesne sınıfının oluşturulmasına olanak sağlar. Yapılandırıcı fonksiyonlar yapılandırdıkları nesne sınıfının prototype özelliği ile koordineli olarak çalışırlar.

Fonksiyonların prototype özellikleri başlangıçta, generik nesne tipi olan, Object nesnesi prototipi ile yanıdır. Buna boş prototip adı verilir. Bunun nedeni, boş prototipin sadece öntanımlı Object sınıfı prototipinin içerdiği öntanımlı özellikleri içermesi, yapılandırılacak nesne sınıfına ait bir özellik içermemesidir.

Boş bir prototip, boş bir fonksiyon yaratıldığında yaratılmış olur. Aşağıda görülen JavaScript kodları , önce boş bir fonksiyon tanımı ile prototpipi boş bir nesne sınıfı yaratılmasını, sonra bu nesne sınıfının prototype özelliğine yeni bir özellik eklenmesini, sonra bu nesne sınıfından bir örnek yaratılarak, yaratılan yeni örneğin bu yeni özelliği varsayılan olarak içerdiğini göstermektedir. Bu programın bağlantılı olduğu olan uygulama sayfasında vermiş olduğu sonuçlar aşağıda görülmektedir:

...
function Personel() {
}

function işlemleriBaşlat() {

Personel.prototype.isim = 'Henüz Girilmedi !';

var ali = new Personel();

sonuçYaz('(Başlangıçta) ali.isim = ', ali.isim, 'b7.6.1-uyg-1-sonuç-1');

ali.isim = 'Ali Özdeğer';

sonuçYaz('(Güncellemiş) ali.isim = ', ali.isim, 'b7.6.1-uyg-1-sonuç-2');

}
...
		

Program Sonucu :

Bu uygulama temel bir yöntemi adım adım belirtmektedir. İlk olarak boş bir Personel() fonksiyonu yaratılmıştır. Bu fonksiyon büyük harfle başlamaktadır, çünkü bu bir yeni kullanıcı tanımlı nesne sınıfı tanımlamaktadır. Böyle boş bir fonksiyon yazılmasının amacı, Personel nesne sınıfına ait prototipin yaratılmasıdır.

Yeni Personel nesne sınıfının prototipi, boş bir yapılandırıcı fonksiyon ile yaratılmış olduğundan başlangıçta öntanımlı Object nesnei prototipi ile aynıdır. Bunun anlamı, Personel nesne sınıfı prototipinin başlangıçta boş olmasıdır çünkü sadece genel öntanımlı standart Object prototipinin özelliklerini içermekte ve Personel nesne sınıfına ait henüz hiçbir özellik tanımlanmamış olduğundan, Personel nesne sınıfına ait bir özellik içermemektedir.

Bundan sonraki adımda, Personel nesne sınıfına ait ilk özellik ve bunun varsayılan değeri

Personel.prototype.isim = 'Henüz Girilmedi !';
		

şeklinde tanımlanmıştır. Bu adımla, bundan önce yaratılmış ve bundan sonra yaratılacak her Personel nesne sınıf örneğinin isim adlı bir özelliği olacağı ve bunun varsayılan yani başlangıç değerinin 'Henüz Girilmedi !' olacağı belirlenmiştir. Burada varsayılan bir değer belirtmek yararlı olmaktadır. Çünkü, daha önce yaratılmış tüm eski nesne örneklerinde bu yeni özellik henüz girilmemiş durumdadadır. Bir sorgulamada bu özelliğin değeri, undefined olarak belirtilecektitr. Bunun yerine varsayılan değerin çıktılarda görülmesi daha uygun olacaktır. Aynı durum bundan sonra yaratılacak Personel sınıfı nesne örnekleri için de geçerlidir. Bunlar da yaratılırken yeni isim özelliğine bir değer atanmadan yaratılırlarsa, bir sorgulmada yine undefined yanıtını vereceklerdir. Bunun yerine de varsayılan değerlerin görülmesi her bakımdan daha iyidir.

Bundan sonraki program adımlarında, Personel kullanıcı tanımlı nesne sınıfına ait bir örneğin yaratılmasını, bu örneğin isim özelliğinin başlangıçtaki ve bir değer atandıktan (güncellendikten) sonraki değerinin yazdırılması yapılmaktadır.

Yukarıdaki uygulama da görülen basit kullanıcı tanımlı nesne sınıflarının boş prototiple tanımlanması ve daha sonra bu prototipin arttırılarak nesne sınıfının yapılandırılması, az sayıda özellik içeren ve az sayıda örneği yaratılacak kullanıcı tanımlı nesne sınıfları için uygulanabilecektir. Daha fazla özellik içeren ve çok sayıda örneği yaratılacak nesne sınıfları için bu basit yöntem kesinlikle yetersiz kalacaktır. Daha kapsamlı ve örnekleri yaratırken yapılandırabilecek yapılandırıcı fonksiyonların yazılması gerekmektedir.

Daha kapsamlı ve hemen hemen standart bir yapılandırıcı fonksiyon yazılımı aşağıda görülmektedir.

function Çalışan(num, isim, soyisim, girişGünü, girişAyı, girişYılı) { 

this.nr = num || 'Henüz Girilmedi !';
this.ad = isim || 'Henüz Girilmedi !';
this.soyad = soyisim || 'Henüz Girilmedi !';
this.gün = girişGünü || 'Henüz Girilmedi !';
this.ay = girişAyı || 'Henüz Girilmedi !';
this.yıl = girişYılı || 'Henüz Girilmedi !';
this.tarih = function() {
var işeGirişTarihi = this.gün + '/'+ this.ay + '/' + this.yıl ;
return işeGirişTarihi;
}
}
		

Bu yapılandırıcı fonksiyonun çalışmasının anlaşılması çok kolaydır. Burada, this.nr, this.ad, this.soyad, this.gün, this.ay, this.yıl, this.tarih, için this saklı sözcüğü, yapılandırılmakta olan kullanıcı tanımlı, Çalışan sınıfından yeni nesne örneğine aittir. Fakat kullanıcı tanımlı Çalışan sınıfının prototipinin tarih özelliğinin değeri bir fonksiyondur. Bir nesne özelliği olarak tanımlanmış olan fonksiyonlara metot denildiğini biliyoruz. Genel fonksiyonlar ve metotlar arsında fazla bir fark yoktur. Bilindiği gibi genel fonksiyonlar da Global JavaScript Nesnesinin bir metodudur. Nesne metotlarının genel fonksiyonlardan farkı, genel foksiyonların kendi parametrlerini kullanarak kendi kendilerine yetebilir olması, nesne metotlarının ise, this saklı sözcüğünü kullanmasıdır. Bir metot içindeki this saklı sözcüğü, metodu çağıran nesneye aittir.

Yapılandırıcı fonksiyonun this.nr = num || '....' kısmı, eğer, formal parametre listesinde, num parametresi sırasında bir argüman yoksa, o zaman varsayılan değer olarak, nr parametresine ' ' değerini ata anlamına gelmektedir. Bilindiği gibi, JavaScript programlama dilinde, foksiyonların tanımlandıkları formal parametre listesi ile çağrılmaları zorunluğu yoktur. Aslında bu hiç uygun olmayan bir programlama stili ise de, uygulanmaması için bir neden yoktur. Yapılandırıcı fonksiyonun formal parametre listesi dışında bir argüman sayısı ile çağrıldığında, bulunmayan argümanın yerine bir varsayılan değerin atanması için bu ifade konulmuştur. Aksi takdirde, yapılandırıcı fonksiyonun kullanıcı tanımlı nesne sınıfı prototipine eklediği fakat bir değer atayamadığı her özelliğin değeri, undefined olacaktır.

Yapılandırıcı fonksiyonun içindeki this değeri ile, metodun içindeki this değerinin farklı nesneleri belirttiğinin anlaşılması için, yapılandırıcı fonksiyonun çalışmasının anlaşılması yeterli olabilir. Bir yapılandırıcı fonksiyonun tek işlevi, nesne sınıf örneklerinin yapılandırılması değildir. Yapılandırıcı fonksiyonlar, nesne sınıf örneklerini yapılandırmanın yanında, nesne sınıflarının prototiplerini de düzenlerler. Çalışan() yapılandırıcı fonksiyonu da Çalışan kullanıcı tanımlı nesne sınıfının prototipini belirlemektedir. Burada görüldüğü gibi, bir de metot bulunmaktadır. Temelde bir fonksiyon olan metotlar, tanımlandıklarında çalışmazlar, sadece çağrıldıklarında çalışırlar.

Çalışan() yapılandırıcı fonksiyonu kullanılarak yeni bir Çalışan sınıfından nesne örneği yaratıldığında, bu nesne örneğinin nr, ad, soyad, gün, ay, yıl değer özelliklerine bir değer atanır. Bu yeni nesne sınıf örneğinin tarih özelliği ise ancak prototipindeki metodun çağrılması ile değerlenir. Çalışan nesne sınıfı prototipindeki tarih() metodunu, aynı prototipi paylaşan, yani aynı aileden tüm nesne örnekleri çağırabilir. Her defasında, toplam() metodunun içindeki this değeri metodu çağıran nesne örneğinin özelliğinin değeri ile özdeşleşir ve metot değeri buna göre hesaplar. Bu gerçek bir polimorfi olayıdır. Bir tek metodu birden fazla nesne örneği paylaşabilir.

Bir nesne sınıfı prototipinde bulunan bir metodu sadece o prototipi paylaşan, aynı aileden nesne örnekleri değil, aynı zamanda yapısı uygun olan başka sınıf örnekleri de apply() ve call() metotları yardımı ile çağırabilir. Metodun tanımındaki this değeri, sürekli olarak, kendini çağıran nesne içindeki aynı adlı özellikleri arar ve bulduğunda this değerlerinin yerine bulduğu özellik değerlerini kullanarak hesaplarını yapar ve değerini döndürür. Buradan metodun bünyesinde olan this saklı sözcüğünün belirrtiği özellik değeri ile yapılandırıcı fonksiyonun this değerinin farklı olduğu anlaşılır. Birisi yapılandırılan nesne örneğine ait iken, diğeri kendini çağıran nesne örneğinin özellik değerine ait olmaktadır. Doğal olarak yeni yapılandırılan nesne örneği, tarih() metodunu çağırırsa, onun özellik değerleri de tarih() metodunun this değerleri tarafından algılanır ve tarih özelliğinin değeri hesaplanır.

Önceden de açıklanmış olduğu gibi, sadece yapılandırıcı fonksiyonların belirttiği nesne sınıflarının prototip özellikleri vardır. Fonksiyon sınıfı dışında nesne örnekleri, kendi ailelerinin prototipini paylaşırlar, fakat nesne örneklerinin kendilerine ait özgün özellikleri de olabilir. Eğer bir p nesne örneğine, p.x = 20; şeklinde yeni bir özellik eklenirse, bu sadece p nesne örneğini ilgilendirir. Aynı sınıftan diğer nesne örnekleri bu yeni özelliğe sahip olmazlar. Fonksiyon sınıfı dışında nesne özelliklerinin prototipi yoktur. JavaScript yorumlayıcısı, fonksiyonlar dışında nesne örneklerinin özelliklerinin sadece bir envanterini tutar. Bu tip nesne örneklerinin tanımlanmış özgün özelliklerine, uygun kapsamdan, program sonuna kadar erişilebilir.

Diğer taraftan, bir nesne sınıfının prototipinin değiştirilmesi, aynı sınıftan tüm önceden yaratılmış ve sonradan yaratılacak örneklerin yapısını etkiler. Bu açıdan bir nesne sınıfınının protototipi, olanaklar ölçüsünde, yaratılmış örnekler varsa değiştirilmemeli, zorunlu durumlarda, eski yaratılmış olan örneklerin yeni özellikleri için değer ataması yapılmalıdır.

Gelişkin bir yapılandırıcı fonksiyon kullanılarak, kullanıcı tanımlı bir nesne sınıfı prototipinin oluşturulması ve ve bu sınıftan bir nesne örneğinin yaratılmasını sağlayan bir JavaScript programı ve bağlı olduğu uygulama sayfasında verdiği sonuç, aşağıda görülmektedir.

/* <![CDATA[  */
			
/* Bu Program bdelib.js Kitaplık Programını Kullanmaktadır */

function Çalışan(num, isim, soyisim, girişGünü, girişAyı, girişYılı) { 

this.nr = num || 'Henüz Girilmedi !';
this.ad = isim || 'Henüz Girilmedi !';
this.soyad = soyisim || 'Henüz Girilmedi !';
this.gün = girişGünü || 'Henüz Girilmedi !';
this.ay = girişAyı || 'Henüz Girilmedi !';
this.yıl = girişYılı || 'Henüz Girilmedi !';
this.tarih = function() {
var işeGirişTarihi = this.gün + '/'+ this.ay + '/' + this.yıl ;
return işeGirişTarihi;
}
}

function düzenle() {

var personel45 = new Çalışan(45, 'Ahmet',  'Özel',  '16',  '09', '2006'); 

bilgiYaz(personel45.nr, 'b7.6.1-uyg-2-sonuç-1');

bilgiYaz(personel45.ad, 'b7.6.1-uyg-2-sonuç-2');

bilgiYaz(personel45.soyad, 'b7.6.1-uyg-2-sonuç-2');

bilgiYaz(personel45.tarih(), 'b7.6.1-uyg-2-sonuç-4');
}

sayfaYüklendiktenSonraÇalıştır(düzenle);
			
/* ]]> */
		

Program Sonucu :

Personel Kaydı : personel45
Özellik Değer
nr  
ad  
soyad  
İşe Giriş Tarihi  

Bu uygulama, birçok noktadan üzerinde durulması gereken bir programa ev sahipliği yapmaktadır. İlk olarak programın çıktısı çok güzel bir tablo halinde verilmektedir. JavaScript programlama dili çıktıları, XHTML ve CSS ile birleştirildiğinde, çok kolay düzüenlenen güzel görünüşlü çıktılar verebilmektedir. Dünyada bu özelliğin gitgide daha fazla farkına varılmakta ve bu programlama diline övgüler yazılmaktadır. Bundan başka, yapılandırma fonksiyonunun, tek atışta nesne örneğini yarattığı dikkat çekicidir. Prototip arttırmaya dayalı bir önceki yöntemin ağırlığı ve yazılım yükü ile karşılaştırıldığında, bu son uygulama önemli bir gelişme sayılabilir. En son olarak da tarih() metodunun uygulanmasında, this saklı sözcüğünün nasıl çağıran nesne örneği personel45 'in özellikleri ile bütünleşmesi dikkat çekicidir.

7.7 - Function() Fonksiyonu

Eğer Function() fonksiyonu, yapılandırıcı olamak yerine Function(a, b, fonksiyon gövdesi); şeklinde çağrılırsa, aynı new Function(a, b, fonksiyon gövdesi); gibi yeni bir fonksiyon nesnesi yaratır. Fonksiyon nesnelerini kullanmaya eğilimli olmadığımız ve eğer fonksiyon nesnelerini kullanacaksak, bunu doğru yoldan yapmayı yeğ tutacağımızdan, bu kısım üzerinde durmayacağız.

Valid XHTML 1.1