Terimleri "kamu" ve "özel" Javascript gerçekten uygun değildir. Anahtar şudur: Eğer var bilmek bazı işlevine başvurmak için bir yol var mı? Yani, ad (ya doğrudan veya başvuruda başka bir nesnenin bir özelliği olarak) kendisine başvurabilirsiniz nedir? Eğer öyleyse, tebrikler, işlevini çağırabilirsiniz. Değilse, o zaman yapamazsın.
Bu ne demektir, Java ya da C düşünün gibi bir şey olduğu gibi bir fonksiyonun "kamusallığın" statik bir şey değil olmasıdır:
var x = (function() {
function maybePrivate() { return "my privates!"; }
return {
getMyPrivates: function() {
var rv = maybePrivate;
this.getMyPrivates = function() { return null; };
return rv;
}
};
})();
Tuhaf. Yani şimdi "x" bir nesne, ve orada bir "maybePrivate" fonksiyonu var olduğunu görebilirsiniz. Ancak, bu isim - "MaybePrivate" - outside x sizi işlevine almak için adını kullanamazsınız, çünkü, size hiç bir faydası olmaz.
Ancak, bu garip nesne "getMyPrivates" denilen another işlevi vardır, ve can bunu almak. Onu aramak, size o işlevi çağırmak için kullanabileceğiniz "maybePrivate" işlevi, başvuru geri almak. Şimdi, "maybePrivate" hala özel? Peki, bunu yaparsanız:
alert(x.getMyPrivates()());
Eğer "benim mahrem!" göreceksiniz mesajı. "MaybePrivate" artık çok özel değil gibi Yani görünüyor. Ancak, bu ilk kez çağrıldıktan sonra kendini dışarı dummied olmak için "getMyPrivates" düzenler çünkü again, bu işe yaramaz olduğunu denemek eğer.
Görünümlü camdan bu küçük gezi noktası Javascript dinamik olduğunu göstermek için. Gerçekten "statik" olan tek şey (yukarıdaki örnekte "maybePrivate" gibi) bir kapak içinde işlevini mühürlü bir kez, sen outside den ortaya zorlamak değil ki nesne (en azından değil, bazı gerçekten şaşırtıcı kontorsiyon geçmeden, dil bir şey :-) "imkansız" olduğunu iddia etmek tehlikeli olduğunu çok duygusal olduğunu. Örneğin o nesne onun "özel" şeyler ortaya çıkarmak için tercih olabilir, ama o da değil seçebilirsiniz.