2010-01-29 13 views
5

Zasadniczo staram się zrozumieć i nauczyć się zasady działania tego słowa kluczowego w JavaScript."to" słowo kluczowe odnosi się do jakiego obiektu wewnątrz funkcji wewnątrz innej funkcji?

O ile rozumiem "to" odnosi się do obiektu (funkcji), że jest w tym momencie.

Więc wierząc tym, chciałem przetestować wyjście prostego kodu poniżej:

<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> 

a jego wyjście myli mnie. Ponieważ w funkcji inner(), This.Son generuje zwiększoną liczbę całkowitą Son. Ale spodziewam się tego. Ojciec się nie powiódł, ponieważ inner() nie ma atrybutu .Father. Jednak zamiast wyrzucać wyjątek informuje, że wartość this.Father-co wydaje

  • linię powyżej „ten” odnosi wewnętrzną()
  • i następującą linię „ten” odnosi zewnętrznej()

w tym momencie mam 2 pytania w mojej głowie właściwie:

  1. oznacza „to” słowo kluczowe odnosi się zawsze do zewnętrzną obudowę zakres, nawet wewnątrz funkcji wewnętrznych?

  2. I bez zadeklarowanych żadnych wystąpień "to" słowo kluczowe odnosi się do tego, co w metodzie? (Mam na myśli bez czegoś lik var myFamily = new Outer())

Dzięki

burak Özdogan

Odpowiedz

5

this jest określona przez wzór wywołania, czyli jak obiekt funkcja jest wywoływana.

4 różne rodzaje schematów wywołania:

  1. wywołania metody: Zastosowanie zdefiniowane jako właściwość jakiegoś przedmiotu i jest uruchamiany przez obiekt za pomocą udoskonalenia, czyli ..

    a.func(); // this odnosi się do obiektu, tj. a.

  2. Wywołanie funkcji: zwykłe wywołanie funkcji.

    func(); // this jest wiązaniem z obiektem globalnym.

  3. Inwokacja do przetworników: Cóż, jest to trochę skomplikowane. Ponieważ konstruktory są używane jako, no cóż, metoda consturctor dla nowych obiektów funkcji to new, this odnosi się do tworzonego nowego obiektu funkcji.

    var func = new Func(); // this dotyczy func wyciągnięcie Func konstruktora)

  4. stosuje przywołanie:

    func.apply (thisArg, argArray); // this jest wiązanie do pierwszego argumentu

W innym słowy, this w przykładzie wszystko odnosi się do globalnego obiektu (swoją onClick połączeń Other()). Zamiast tego powinieneś spróbować użyć new Other().

+0

Dzięki, to naprawdę przydatne informacje. można znaleźć więcej informacji na temat wzorców wywoływania w tym artykule: http://mcarthurgfx.com/blog/article/4ways-functions-mess-with-this – pencilCake

+0

Ten jest również dość wyjaśniający: wywołanie funkcji w JavaScript - rewidowane konteksty - http://msmvps.com/blogs/luisabreu/archive/2009/08/24/function-invocation-in-javascript-contexts-revisited.aspx – pencilCake

Powiązane problemy