2013-02-13 14 views
5

Questo è un esempio:Sono confuso sulla parola 'questo' in JavaScript

function one() { 

    var a = 1; 
    two(); 

    function two() { 

     var b = 2; 
     three(); 

     function three() { 

      var c = 3; 
      alert(a + b + c); // 6 

     } 
    } 
} 

one()​; //calling the function 

Ora quando chiamiamo funzione one(), il risultato è 6.

Quindi è tutto sulla catena di portata, tutte le variabili sono state risolte, ora ho una domanda.

Perché è necessaria la parola chiave "questa" quando tutte le variabili vengono risolte tramite la catena di portata?

Quindi, se abbiamo la seguente funzione:

function a() { 
    var a = 'function a'; 

    function b() { 
     var b = 'function b'; 
     alert (a); //will be function a, without keyword this 
     alert (this.a); // what will be the effect of this line 
    } 
} 

Il "questo" parola chiave mi confonde sempre!

Qualcuno si prega di spiegare in modo semplice e in dettaglio.

+0

Leggi questo: http://www.quirksmode.org/js/this.html – BizApps

+0

questo non è quello che pensi che sia. – Mehrdad

risposta

-1

sull'uso della parola chiave

Da un metodo di istanza o un costruttore, questo è un riferimento all'oggetto corrente - l'oggetto di cui metodo o costruttore viene chiamato. È possibile fare riferimento a qualsiasi membro dell'oggetto corrente all'interno di un metodo di istanza o di un costruttore utilizzando questo. Utilizzo di questo con un campo

Il motivo più comune per utilizzare questa parola chiave è perché un campo è ombreggiato da un metodo o un parametro costruttore.

0

Questa parola chiave si riferisce all'ambito della funzione. Nel codice precedente il questo.a verrà stampato indefinito poiché non vi è alcuna variabile denominata a. La parola chiave viene utilizzata per indicare lo scope locale corrente e non l'ambito globale. quindi se tu avessi una variabile chiamata a nella tua funzione b allora this.a farà riferimento alla variabile definita nella funzione b e non al di fuori di essa. Considerando che questo all'esterno della funzione b farà riferimento allo scopo globale.

3

Essi parola chiave this si risolve nei seguenti modi in una funzione in JavaScript -

  1. Quando una funzione viene richiamata su o tramite un oggetto, l'oggetto è l'invocazione contesto o 'questo' valore per la funzione. Per esempio -

    var o = { 
        f : function(){ 
         //do something 
        } 
    } 
    

    se chiamiamo il metodo 'f' dell'oggetto 'o' con oggetto 'o' -

    o.f()// in method f, 'this' refers to o inside the method o 
    
  2. Se la funzione non viene richiamata o non attraverso un oggetto, l'oggetto corrente della finestra è il contesto di chiamata o il valore this per la funzione. Per esempio -

    function f(){ 
        //do something 
    } 
    
    //calling f 
    f();// 'this' will refer to current window object 
    

Nel vostro caso, questo si riferisce all'oggetto finestra corrente e this.a è un riferimento alla funzione di una, che è stato definito nell'ambito globale.

Inoltre, durante la chiamata è possibile fornire il contesto di chiamata o il valore "questo" per la funzione. Si prega di controllare Function.prototype.call method - JavaScript | MDN e Function.prototype.apply method - JavaScript | MDN