2016-10-31 4 views
0

Was ist der Unterschied zwischen den beiden folgenden Codesegmenten ist:Javascript: Konstruktorfunktion dieses Schlüsselwort

function HelloService(){ 
    var service = this; 
    service.itemList = [] 

    service.hello = function(){  
    return "Hello World!!"; 
    }; 

    service.addItem = function(){ 
    service.itemList.push(1); 
    } 
} 

function HelloService(){ 
    var service = this; 
    var itemList = []; 

    var hello = function(){  
    return "Hello World!!"; 
    }; 

    service.addItem = function(){ 
    itemList.push(1); 
    } 

} 

Denn soweit ich die this in der hallo Funktion und außerhalb der hallo Funktion verstehen verweist auf dieselbe Instanz.

Könnte jemand das obige Problem w.r.t zu JAVA erklären?

EDIT: Ich habe eine addItem Funktion hinzugefügt. Hier verstehe ich nicht den Unterschied zwischen service.itemList und var itemList innerhalb der . Können Sie den Unterschied innerhalb dieser Funktion erklären?

+1

'this' innerhalb der Funktion, hängt vollständig davon ab, wie Sie die Funktion – adeneo

+1

im ersten aufrufen (mit' this.hello') können Sie die Hallo-Funktion von außen aufrufen ('console.log (new HelloService() .hello()); '). In der zweiten ist hello nur eine lokale Variable, die von außen nicht zugänglich ist. – FirePanther

+0

Es ist wirklich wert, die genaue Bedeutung von "das" in JS nachzulesen. Verstehen Sie, dass es fast nichts mit einem Klassenkonzept wie in Java zu tun hat. Wie Adeneo sagt, geht es um den Anruf, nicht um die Erklärung. – DrC

Antwort

2

Lokale Variablen in Javascript-Funktionen werden nicht als Eigenschaften von this hinzugefügt. Die erste entspricht:

function HelloService(){ 
    this.hello = function(){  
    return "Hello World!!"; 
    }; 
} 

aber nicht:

function HelloService(){ 
    var hello = function(){  
    return "Hello World!!"; 
    }; 
} 

die nichts tut, da die von hello referenzierte Funktion nie verwendet wird, und ist nicht in den Anwendungsbereich von Hello nicht zugänglich.

+0

Einige weitere Ressourcen für das Lernen über JS 'this': https://derickbailey.com/email-courses/masteringthis/, https://developer.mozilla.org/ de-DE/docs/Web/JavaScript/Referenz/Operatoren/das, http://javascriptsexy.com/understand-javascripts-this-with-clarity-and-master-it/ – erictgrubaugh

+0

'var varName =" val ";' ist in der Regel nur gleich this.varName = "val"; im globalen Kontext. – chiliNUT

+0

@chiliNUT - es geht nicht um den Kontext oder den Wert von 'this', sondern um den Umfang. Wenn innerhalb einer Funktion, auch wenn dies das globale ist, wird die Variable nicht hinzugefügt -> https://jsfiddle.net/9ygu01nj/ – adeneo

Verwandte Themen