2016-05-06 13 views
0

Dies gibt thisFunction.weather.day() zurück undefiniert .. Warum? Mache ich das richtig?Prototyp eines neuen Prototyps in einem neuen Objekt aufrufen

'use scrict'; 

    var thisFunction = function(){this.event(); }; 

    thisFunction.prototype.weather = function(){ 

     this.day = "Cloudy"; 

    }; 

    thisFunction.prototype.event = function(){ 

     console.log(thisFunction.weather().day); 

    }; 

    var g = new thisFunction(); 

Ich versuche, die Wetterfunktion innerhalb des Ereignisses aufzurufen. Wie Sie unten sehen können, gibt es eine neue Variable, die gleich thisFunction() ist. Wenn ich die Wetterfunktion innerhalb des Ereignisses rufe, ist thisFunction.prototype.weather(). Day nicht definiert. Warum?

Antwort

1

thisFunction ist Ihre Konstruktorfunktion.

Es hat keine .weather() Methode. Also, thisFunction.weather ist undefined und thisFunction.weather() ist ein Fehler.

Die .weather() Methode ist auf dem Prototyp, was bedeutet, dass es auf Instanzen von thisFunction, nicht auf den Konstruktor selbst. Also, in Ihrem Code, könnten Sie tun:

g.weather() 

Oder innerhalb der .event() Methode, könnten Sie dies tun:

thisFunction.prototype.event = function(){ 

    console.log(this.weather()); 
}; 

this.weather().day Arbeit zu machen, würden Sie zu return this haben von der .weather() Methode.

thisFunction.prototype.weather = function(){ 

    this.day = "Cloudy"; 
    return this; 

}; 

thisFunction.prototype.event = function(){ 

    console.log(this.weather().day); 

}; 
+0

Ok, wie kann ich weather.day außerhalb eines Prototyps bekommen? Außerhalb des Prototyps habe ich var thisf = new thisFunction(); – NodeBeginner

+0

@NodeBeginner - Sie verwenden einfach 'g.day' in Ihrem Beispiel in Ihrer Frage. – jfriend00

+0

@NodeBeginner - Es ist genau dort in Ihrer Frage: 'var g = new thisFunction();' – jfriend00

Verwandte Themen