2010-01-29 15 views
5

Temel olarak 'bu' anahtar kelimenin JavaScript'deki çalışma prensibini anlamaya ve öğrenmeye çalışıyorum.'Bu' anahtar sözcük, başka bir işlevin içindeki bir işlev içinde hangi nesneyi gösterir?

Anladığım kadarıyla 'bu', o anın içinde bulunduğu nesneye (işlev) karşılık gelir.

Yani, bu inanarak, aşağıda basit kod çıkışını test etmek istedim:

<body> 

<input type="button" value="Add Age" onclick="Outer()" /> 

<script type="text/javascript"> 

function Outer(){ 

if(typeof this.Father == 'undefined') 
    { 
     this.Father = 0; 
    } 

this.Father+=2; 
alert(this.Father); 

inner(); 

     function inner(){ 
      if(typeof this.Son== 'undefined') 
      { 
       this.Son = 0; 
      }; 

      this.Son++; 
      alert(this.Son); 
      alert(this.Father); 
     }; 
}; 
</script> 
</body> 

Ve çıkış beni karıştırır. Çünkü internal() işlevinde, bu .on, Oğunun artan tamsayı değerini verir. Ama ben bunu bekliyoruz. Father başarısız çünkü iç() .Father özniteliğine sahip değil. Ama bunun yerine, bir özel durum atma bu this.Father -ki değeri

  • 'bu' iç()
  • ve aşağıdaki satırı 'bu'()
, dış belirtir, üzerinde bir çizgi görülmektedir uyarır

  1. mu bu anahtar kelime bile iç işlevleri içinde her zaman dış skopun konut atıfta: Bu noktada

    i aslında aklımda 2 soru var?

  2. Ve 'this' anahtar sözcüğünü bildirmedikçe, anahtar sözcükler yöntemde ne ifade eder?

sayesinde

cevap

5

this çağırma deseni ile belirlenir

Burak Özdoğan (I var myFamily = new Outer() lik bir şey kalmadan ortalama), yani bir işlev nesnesi nasıl çağrıldığını edilir. bu, ., işlev bir nesnenin bir özelliği olarak tanımlanır ve arıtma kullanılarak nesne ile verilir:

  1. yöntem çağırma:

    çağırma desen 4 farklı çeşidi vardır.

    a.func(); // this, nesneye, yani a'a atıfta bulunmaktadır. Işlev çağırma: düz işlev çağrısı.

  2. func(); // this, genel nesneye bağlanır. Kurucu çağırma: iyi, biraz karmaşıktır. Kurucular iyi kullanıldığı için, new, this olmak üzere yeni işlev nesneleri için oluşturucu yöntemi, oluşturulmakta olan yeni işlev nesnesini ifade eder.

    var func = new Func(); // this

  3. çağırma uygulanır) Func yapıcıda func süre anlamına gelir: (thisArg, argArray) func.apply

    ; // this ilk argüman

başka deyişle

, tüm genel nesneyi ifade eder sizin örnekte this (sizin onClick çağrı Other()) için bağdır. Bunun yerine new Other() kullanmayı denemelisiniz.

+0

Teşekkürler, gerçekten yararlı bilgiler. Bu makaledeki arama kalıpları hakkında daha fazlasını bulabilirsiniz: http://mcarthurgfx.com/blog/article/4-ways-functions-mess-with-this – pencilCake

+0

Ve bu da oldukça açıklayıcıdır: İşlev çağırma JavaScript - içerikler yeniden ziyaret edildi - http://msmvps.com/blogs/luisabreu/archive/2009/08/24/function-invocation-in-javascript-contexts-revisited.aspx – pencilCake

İlgili konular