2013-05-02 13 views
22

Onunla bir validator örneğini "taşıyan" (Model.validator) olacak bir Modelim var ve Modelin özelliklerine erişebilmek için Doğrulayıcı'ya ihtiyacım var. Öyleyse, şu andakiler şuNesneler arasında dairesel referans kötü bir uygulama mıdır?

Bu kod, bu 2 nesne arasında dairesel bir referans oluşturur. Bu, bellek sızıntılarına neden olacak kötü bir uygulama mı? Bunu nasıl uygulayacağınıza dair başka fikirler var mı?

P.S. Angular.js kapsamındaki nesneler arasında böyle dairesel referanslar gördüm.

+6

@ArunPJohny :-) kendinizi berbat sürece sorun yok: IE6 belki ... ama modern JS motorları mükemmel gc döngüleri idare edebiliyoruz. – georg

+3

@ArunPJohny: Bile IE6, onlar düz JS nesnelerdir ve serileştirme geldiğinde dairesel referanslar sorunlara neden olacağı DOM – Bergi

+0

Not dahil etmezseniz (JSON.stringify 'yoluyla()' örneğin) – Uriel

cevap

19

bugünün tarayıcılar ile hafıza sızıntıları neden olmayacak kod Bu tür; mentioned on MDN olarak, tüm önemli tarayıcılar, bir süredir (örneğin, Firefox'un kendisi bir sürüm toplayıcıya sahip olduğundan), bir süre boyunca mark-and-sweep GC'leri (sadece döngüleri iyi işleyebilen) ile gönderiyordu.

Mimari açıdan bakıldığında, bu tür bir kod, iki nesne arasında orta derecede sıkı bir eşleşmeyi (küçük bir şekilde bile olsa, diğerinin de değişmesi gerekip gerekmediğini belirlemek için gözden geçirilmesi gerekiyor) tanıtır ve sonuç olarak Mümkünse kaçınılmalıdır. Ama doğasında yanlış bir şey yok.

+6

"orta derecede sıkı eşleştirme "- understatement için bir hediyeniz var. –

+1

@ErickRobertson: Diğer dillerde de sınıf temelli bir miras var, 'dost', 'işi sadece işlenmemiş' yansıtma yapalım ... en azından burada sadece kamusal arayüzle uğraşabilirsiniz. :-) – Jon

2

eminim herhangi bir sorun olmayacaktır. Çöp toplama sırasında çoğu tarayıcıyı 'JS ayrıştırıcıları döngü bağımlılığı ile çalışabilir. Burada daha fazla potansiyel sorun yok.

2

Çöp toplama için bir sorun olmayacaktır: Herhangi bir yeni Çöp Toplayıcı (> IE6) sadece iyi dairesel başvurular idare edecek!

Size özyinelemeli fonksiyonlar yapıyor, ya da nesneyi baskı olup olmadığını gerçi bir sorun olabilir.

Yani cevap şu şekildedir:

İlgili konular