Bana göre, önceki cevabımla beni fazla mecazi ve şifreli. Açıklama aşağıdaki gibidir.
Bir Array, Boolean, Date, Function, Number, RegExp, String örneği bir Object'tir ancak her türe özgü yöntemler ve özelliklerle geliştirilmiştir. Örneğin, bir dizinin önceden tanımlanmış bir length
özelliği vardır, ancak genel nesneler yoktur.
javascript:alert([].length+'\n'+{}.length)
görüntüler
0
Tanımsız
İçsel olarak, FF Gecko yorumlayıcısı, dil yapılarını değerlendiren belirgin farklılıklar ile Diziler ve genel Nesneler arasında ayrım yapar.
javascript:
ra=[ "one", "two", "three"]; ra.a=4;
ob={0:"one", 1:"two", 2:"three"}; ob.a=4;
alert(
ra +"\n\n"+
ob +"\n\n"+
ra.toSource() +"\n\n"+
ra.a +"\t .toSource() forgot me! \n\n"+
ra.length +"\t and my length! \n\n"+
ob.toSource());
ps=""; for(i in ra)ps+=i+" "; alert(ps); /* NB .length is missing! */
ps=""; for(i in ob)ps+=i+" "; alert(ps);
görüntüleme
bir, iki, üç
[nesne Nesne]
["bir, iki, üç"]
4 .toSource () beni unuttu!
3 ve boyum!
({0: "bir", 1: "iki", 2: "üç", a: 4})
ve 0 1 2 a
ve 0 1 2 a
.
Tüm nesnelerin işlev olduğu ifadesine gelince:
Bu ne sözdizimsel de anlam doğru gibi bir fonksiyonu olarak rasgele bir nesne örneği kullanmaktır 123()
veya "abc"()
veya []()
veya {}()
veya obj()
burada obj
başka herhangi bir tip Function
rasgele bir nesne örneği değildir, bu yüzden Function
. Ancak, bir nesne verilir obj
ve 's tipi olarak Array, Boolean, Date, ...
, nasıl ki obj
bir şekilde olması geliyor Array, Boolean, Date, ...
? Bir nedir Array, Boolean, Date, ...
?
javascript:
alert([Array, Boolean, Date, Function,
Number, Object, RegExp, String] . join('\n\n') );
görüntüler
function Array() {
[native code]
}
function Boolean() {
[native code]
}
function Date() {
[native code]
}
function Function() {
[native code]
}
function Number() {
[native code]
}
function Object() {
[native code]
}
function RegExp() {
[native code]
}
function String() {
[native code]
}
Her durumda, belirsizlik olmadan, nesne türü bir function
tanım olarak ortaya çıkar , dolayısıyla tüm nesnelerin işlevler olduğu ifadesi ortaya çıkar! (Yanak dili, bir nesne örneğinin farklılığını kendi türününkiyle kasıtlı olarak gizlemem ve bulanıklaştırmamdır! Yine de bu, "biri olmadan diğerine sahip olamayacağınızı" gösterir, Nesne ve İşlev! örneğin aksine.)
Hem işlevsel hem de nesne paradigması, Math
ve JSON
ve gibi JS yorumlayıcısının düşük seviyeli yerleşik ilkellerinin programlanması ve uygulanması için temel gibi görünmektedir true
.
javascript:alert([Math, JSON, true.toSource()].join("\n\n"));
görüntüler
[object Math]
[object JSON]
(new Boolean(true))
Javascript geliştirilirken, nesne merkezli bir programlama stili (OOP - Nesne Yönelimli Programlama stili - "s" benim kelime oyunumdur!) Revaçtaydı ve tercümana benzer şekilde daha fazla güvenilirlik sağlamak için Java ile vaftiz edildi . İşlevsel programlama teknikleri, Otomata, Özyinelemeli İşlevler, Biçimsel Diller vb. Kuramlarını inceleyen ve bu nedenle lezzetli olmayan daha soyut ve ezoterik incelemelere indirildi. Bununla birlikte, bu resmi düşüncelerin güçlü yönleri, özellikle FF'nin Gecko motorunda (yani. .toSource()
) Uygulandığı haliyle Javascript'te açıkça görülmektedir .
İşlev için Nesne tanımı, bir yineleme ilişkisi olarak tanımlandığı için özellikle tatmin edicidir! kendi tanımı kullanılarak tanımlanmıştır!
function Function() { [native code] }
ve bir işlev bir Nesne olduğu için aynı duygu geçerlidir
function Object() { [native code] }
.
Diğer tanımların çoğu, durağan bir uç değerde sessizleşir. Bununla birlikte, eval()
özellikle güçlü bir ilkeldir ve bu nedenle, bir String aynı zamanda keyfi işlevselliği de katıştırabilir.
Yukarıda kullanılan yerel dilin nesne türünü ve örnek ayrımını gizlediğini tekrar unutmayın.