2016-05-06 4 views
0

Ceci retourne cette fonction.weather.day() est indéfini .. Pourquoi? Est-ce que je fais cela correctement?Appelez le prototype d'un autre prototype dans un nouvel objet

'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(); 

Je tente d'appeler la fonction météo à l'intérieur de l'événement. Comme vous pouvez le voir en bas, il y a une nouvelle var g qui équivaut à newFunction(). Si j'appelle la fonction météo dans l'événement thisFunction.prototype.weather(). Day est indéfini. Pourquoi?

Répondre

1

thisFunction est votre fonction de constructeur. Il n'a pas de méthode .weather(). Donc, thisFunction.weather est undefined et thisFunction.weather() est une erreur.

La méthode .weather() est sur le prototype, c'est-à-dire sur les instances de thisFunction, et non sur le constructeur lui-même. Donc, dans votre code, vous pouvez faire:

g.weather() 

Ou, à l'intérieur de la méthode .event(), vous pouvez le faire:

thisFunction.prototype.event = function(){ 

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

Pour faire fonctionner this.weather().day, vous auriez à return this de la Méthode .weather().

thisFunction.prototype.weather = function(){ 

    this.day = "Cloudy"; 
    return this; 

}; 

thisFunction.prototype.event = function(){ 

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

}; 
+0

Ok, comment puis-je obtenir un jour de météo en dehors d'un prototype? En dehors du prototype, j'ai inclus var thisf = new thisFunction(); – NodeBeginner

+0

@NodeBeginner - Vous utilisez simplement 'g.day' dans votre exemple dans votre question. – jfriend00

+0

@NodeBeginner - C'est juste là dans votre question: 'var g = new thisFunction();' – jfriend00