Merhaba,
Öncelikle grup geneline küçük iki hatırlatma:
1. e-posta başlığımızı tartışma konusunda uygun belirlersek ileride takip edilmesi daha kolay olur.
2. Eğer birileri bir soruya cevap vermek için emek harcıyorsa; en azından soruyu hazırlayan kişi, sorunun okunur ve anlaşılır olması için
* sorusunu paragraflara ayırmak,
* noktalama işaretleri kullanmak,
* ve temel dil bilgisi kurallarına uymak konusunda
"elinden geldiğince" gayret etmelidir diye düşünüyorum.
...
Öncelikle yanıtnız için teşekkür ederim.
Ben teşekkür ederim :)
Volkan bey burada new
anahtarını kullanmak yada kullanmamak arasında fark yok (gibi gördüm )
Aşağıdaki basit örnek iki kullanım arasında fark olduğunu gösteriyor:
<script type="text/javascript">
var osman = function(){ return 4; };
document.write(new osman());
document.write("<br />");
document.write(osman());
</script>
Bu betik, firefox'ta
"
[object Object]
4
"
çıktısını verecektir.
daha önce kullandığım programlama dillerinde rastlamadığım bir durum
olsada javascript ile tanımladığımız function/classlarda constructor
'den değer döndürebiliyoruz.
Belki tarayıcıya özel bir durumdur. Bununla birlikte bu kullanım semantik olarka doğru değil.
Nesneler nesne gibi; metodlar da metod gibi -- amaçlarına uygun kullanılmalıdır.
Yoksa ileride "yazar burada ne demek istemiş" sorusunu kendinize sorar durursunuz.
Bu da kodda bug / hata sayısının arttırır ve gereksiz bakım maliyetleri doğurur.
JavaScript ile gelen bir garbage collection mekanizması yada
aynı işlevi gören bir yapı mevcutmudur
Vardır. Zaten javascript'teki memory leakage sorunu da bu gc mekanizmasının düzgün çalışmamasından dolayı olur (bkz. "circular reference")
Zamanında yazdığım "Memory Leakage in Internet Explorer Revisited" [1] makalesi konuyu biraz daha derinlemesine inceliyor (makele yazmayı özledim ya :) -- projelerden biraz kafamı kaldırabilsem...)
js 'te garbage collection tarayıcıdan tarayıcıya değişiklik gösterir [2]
(google'da "javascript garbage collection" deyince pek çok yararlı makale çıkıyor9
[1]
http://www.codeproject.com/KB/scripting/leakpatterns.aspx
[2]
http://codingforums.com/showthread.php?t=89018
yada bellekten temizleme işlemi
ne şekilde yapılır?
JavaScript'te java'ya benzer bir System.gc() çağrısı yapamazsın (kaldı ki Java'da da System.gc() çağrısı yapman önerilmez; garbage collection'ı sisteme bırakman tavsiye edilir)
[1] nolu makalede birkaç yöntem var:
- Nesneyi delete ile bellekten silebilirsin.
var obj = "test";
delete obj;
- xmlhttprequest 'in onreadystatechange olay dinleyicisi için delete ya da null atamak hata verir; onun için
xhr.onreadystatechange = function(){};
şeklinde anonim bir fonksiyon literali aktarabilirsin.
- closure ve circular refaranslardan kurtulmaya çalışabilirsin (google:closure)
Yardımcı olması dileğimle,
--
Volkan Ozcelik
+> Front End Architect, MessengerFX :
http://www.messengerfx.com/+> I tweet:
http://twitter.com/linkibol
+>
linkibol.com - in seek for quality links :
http://www.linkibol.com/+> my blog (in Turkish) :
http://www.fikribol.com/donkisot/
+> Sardalya JavaScript Library :
http://www.sarmal.com/sardalya/