2016-01-06 2 views
0

En train d'essayer d'ajouter $ 1 à mon Tween chaque fois que la méthode makeMoney est appelée, mais à la place, je reçois une erreur indiquant que la méthode makeMoney n'est pas une fonction. J'ai l'intuition que cela a à voir avec this mais j'ai essayé de lier 'ceci' à la méthode makeMoney en vain. Cela semble vraiment être simple, mais je suis vide.Chaînage Prototypique en JavaScript

var Tween = function() { 
    Adolescent.call(this); 
    this.age = 12; 
    this.job = 'annoy'; 
    this.allowance = 5; 

}; 
Tween.prototype.makeMoney = function(){ 

    return this.allowance ++; 
} 

Tween.prototype = Object.create(Adolescent.prototype); 
Tween.prototype.constructor = Tween; 

Répondre

4

Ce que vous faites ici est d'abord vous ajoutez la fonction au prototype de l'interpolation objet, puis, vous écrasez tout objet prototype avec Object.create(Adolescent.prototype). C'est pourquoi c'est indéfini. Au lieu de cela, faites l'héritage avant d'étendre le prototype.

var Tween = function() { 
    Adolescent.call(this); 
    this.age = 12; 
    this.job = 'annoy'; 
    this.allowance = 5; 

}; 

Tween.prototype = Object.create(Adolescent.prototype); 
Tween.prototype.constructor = Tween; 

Tween.prototype.makeMoney = function(){ 

    return this.allowance ++; 
} 
+0

Intéressant. Je ne m'imaginerais pas que le placement serait important. Il est clair que c'est important mais conceptuellement pourquoi? – DLF85

+0

Eh bien, c'est tout à fait logique. D'abord vous faites l'héritage et ensuite développez le prototype. 'Object.create' crée un nouvel objet, c'est la ligne de fond ici –

+0

@ DLF85: Rappelez-vous que' prototype' est juste une propriété (celle que l'opérateur 'new' utilise, mais encore, juste une ancienne propriété ennuyeuse), et le La chose qui y est attachée n'est qu'un objet. Les fonctions ont un objet par défaut, que nous devons remplacer (pour configurer l'héritage). Donc, tout comme 'a = {}; a.foo = "bar"; a = {}; 'signifie que nous nous retrouvons avec un objet sur' a' sans propriété 'foo' ... –