Pourquoi la fonction de greet ne renvoie pas la valeur attendue?
Question:
Pourquoi ne le salue la fonction renvoie pas la valeur attendue?
Code:
function Person(name){
this.name = name;
}
Person.prototype.greet = function(otherName){
return "Hi" + otherName + ", my name is " + name;
}
Comment puis-je répondre à cela? J'ai créer une nouvelle personne alors que dois-je faire?
var John = new Person("John");
source d'informationauteur flylib
Vous devez vous connecter pour publier un commentaire.
Mauvaise méthode d'accès. la variable
name
n'est pas définie, seulthis.name
est défini. Donc, c'est la recherche d'une variable dans la portée de la fonction appeléename
au lieu d'une propriété de l'objet appeléname
.Pour accéder à une propriété de l'objet à partir de l'intérieur de l'objet, nous utilisons la
this
mot-clé. Ainsi, nous aurons besoin d'utiliserthis.name
pour accéder à laname
propriété dans la mise en œuvre ci-dessous.Dans votre code:
Lorsqu'il est appelé en tant que constructeur, le ci-dessus va créer une propriété nommée d'une instance appelée nom et affectez-lui la valeur de la nom paramètre.
Ici l'identifiant nom est utilisé comme une variable, mais l'identifiant que vous cherchez est un nom de propriété de l'instance, si vous avez besoin d'accéder à ces. En général, cette fonction sera appelée comme une méthode de l'instance afin ce au sein de la fonction sera une référence à l'instance. Donc, vous voulez:
Alors maintenant, quand vous pouvez le faire (notez que les variables commençant par une majuscule sont, par convention, réservés pour construtors):
et puis:
parce que salue est appelée comme une méthode de jeanil sera de retour:
Autrement, puisque c'est un problème de portée de l'héritage (deuxième fonction n'ayant pas accès à la variable "nom"), nous pouvons reformuler le code ressemble à ceci pour inclure tous les termes de la fonction de Personne:
Fonctionne aussi bien.
Vous avez besoin de changer le salue la fonction à utiliser le nom de l'objet avec le
this
mot-clé:après cela, il suffit d'appeler
John.greet("other name");
Essayez ce qui suit: