2010-04-23 27 views
18

JavaScript'i bazen kimi zaman, farklı amaçlarla (uygun kapsamı belirlemek, obfusatörlerin kodlarına yardımcı olmak için) yerel bir değişkende this nesnesinin başvurusunu saklarsınız. Niyetini açıkça ortaya koymak için this'u that'a taklit eden kodlayıcılar vardır. Diğer adamlar, nesnenin kendisine işaret ettiği için self kullanıyor. Kaynak kodları me'un referansı tuttuğunu bile gördüm ve yine de mantıklı. Kesinlikle başkaları var., kendiniz veya ben - hangi JavaScript tercih edersiniz?

Hangisini tercih etmeliyim? Kullanılacak bir kongre var mı, yoksa sadece tadı meselesi.

+1

Programlama arka planının (ana?) ana (ana) (Small) veya Python (Onları kullananlardan, 'kendini' kullanma eğilimindedir. – outis

cevap

42

Kişisel olarak that'u kullanıyorum, ancak açık olan her şey yolunda. genel değişken/window -property self zaten window için bir referans olarak bulunduğundan

Ben self kullanmak ister.

var se1f= this;   // mis-spelled (perniciously). or maybe you just forgot to write line 
onclick= function() { 
    self.foo= 1;  // whoops, just wrote to `window`! 
}; 

oysa:

var thot= this; 
onclick= function() { 
    that.foo= 1;  // error thrown 
}; 

tamamen yararsız (yani kimse bunu gölgeleme olduğunuzu bakım muhtemeldir) rağmen, biraz saçma hata riski fark edilmeden gidiyor artırır Biraz zahmetli, ama JavaScript'in o kadar kaygısız ve sıcağı sıcağa uğratıyor ki, gerçekten bunu yapmak istemiyorsun.

+0

Başka bir aksilik, 'self'e atandığında 'var' un unutulmasıdır. IE * nefret ediyor * bu. –

+0

Evet, iyi eski IE ve onun atama-pencere-özellik eğlenceli. Yine de en azından Kötü Bir Uygulama Yaptığınızı bildirmek için bir hata atıyor. Hata mesajı umutsuzca yanıltıcı olsa bile. – bobince

2

Elma sepetinizde bir portakal var, this çok özel bir bağlamsal anlama sahiptir. Seçim bu seçeneklerin gerçekten self ve me arasındadır. Bunların arasında ... seçersiniz, her iki şekilde de sadece kişisel tercihiniz yoktur.

this, içeriğinizin içeriğiyle ilgilidir, bu nedenle çok fazla karışıklık ve hata yapmaksızın gerçekten bir "seçenek" değildir.'un me'dan çok daha fazlasını kullandığını görüyorum (örnek kod, çerçeveler, kütüphaneler vb.). Sadece tercih, ama kabul ediyorum self daha çekici, neden emin değilim ... tekrar sadece benim tercihi.

+2

Benden hoşlanıyorum çünkü yazı yazmak için iki harf daha az… ama * tutarlı * olduğu sürece önemli değil. –

+2

@codeka - mükemmel nokta, tutarlılık * uzak * burada isim seçiminden daha önemli –

+2

Tutarlılık noktasında kabul edildi. Bu seçenek, bir programcının diğer dil deneyimlerine ihanet etmesi olabilir. 'self', Delphi'nin' 'bu' ve' '' 'VB versiyonudur. Bildiğim kadarıyla, başka bir dilde kullanılmıyor. –

1

Kişisel olarak, değişkeni “daha ​​sonra ihtiyacım olan şeyden” biraz daha fazla anlamlandırmak için daha iyi olmaya çalışıyorum. Çoğunlukla biraz gnarly olan durumlarda bu geçici değişkenlere ihtiyacınız vardır; İzlemeyi sürdürmek için iki ya da daha fazla geçici this stoka katmanı olabilir.

Böylece, jQuery kurulumunda örneğin, geçici bir this zulası tutmak gerektiğini eleman türüne dikkat şey kullanabilirsiniz:

$('form').each(function() { 
    var $form = $(this); 
    $form.find('input:checkbox').each(function() { 
    var $checkbox = $(this); 
    // ... 
    }); 
}); 

değişkene "$" öneki kullanılması güzel bir yoludur nesnenin "jQuery-ized" olup olmadığının izini sürmek için :-)

İlgili konular