2012-06-27 20 views
7

Şu anda Titanium Studio'da JavaScript (CommonJS) kullanıyorum ve prototip oluşturma hakkında bir sorunuz var. Mevcut bir sınıfa yeni bir işlev eklemek istediğimi varsayalım. Örneğin:Dize prototipini eklemek için:

String.prototype.trim = function() { 
    return this.replace(/^\s+|\s+$/g,""); 
} 

Bu kodu eklemem gereken en uygun yer neresidir? Hemen tüm sınıflar için kullanılabilir hale geldi?

Şimdiden teşekkürler.

cevap

8

Tamam, iyi cevabı buldum (Ivan Škugor tarafından) ve aynı soruyu kiminle paylaşacağını buraya koymak istiyorum. Yardım ettiğin için teşekkür ederim.

"Yerel prototiplerin genel olarak genişletilmesi iyi bir fikir değildir. Bu özel durumda, bu, diğer bazı ortamlarda bir sorun olmamalıdır, ancak CommonJs kullanarak, bu her bir CommonJs modülü yeni JS olduğu için bir sorun değildir. bağlamı, anlamı, JS ortamını temizler.Yani, çevre ile yaptığınız her şey (yerel prototipleri genişletmek gibi) diğer modüllere yansıtılmaz. Bundan dolayı, en iyisi yardımcı işlevler içeren "utils" modülünü yazmaktır. " "ihtiyacınız olan her yerde" gerektirir.

//utils.js 
exports.trim = function(str) { 
    return str.replace(/^\s+|\s+$/g,""); 
}; 

- Ivan Skugor Cevabınız Sean için

4

Sadece kodun denenecek ve kullanılmaya başlanmadan önce tanımlandığından emin ol ve ayarlanacaksın! çoğu tarayıcı kendi Döşeme yöntemi var çünkü

+0

teşekkürler. Ama bunu nasıl/nerede yapmalıyım diye bir sözleşme yok mu? – junior

+0

Her yerde kullandığınız bir kütüphaneniz varsa, her zaman oraya koyabilirsiniz. Normalde, işleri düzenli ve düzenli tutmak için, içerdiğim kitaplıkların en üstünde, yerleşik sınıflara eklenen işlevleri tanımlarım. CSS dosyasının üstündeki HTML etiketlerinin CSS özelliklerini ve sonra sınıfları/kimlikleri tanımladığım gibi. –

5

Sizin örnek, kullanmak iyi biridir, bu nedenle kendi eklemeden önce yerli test etmek en iyisi:

String.prototype.trim= String.prototype.trim || function(){ 
    return this.replace(/^\s+/, '').replace(/\s+$/, ''); 
} 
İlgili konular