2010-04-18 2 views
1

J'ai construit un objet en Javascript sur le moteur de script de Google Apps et chaque fois que j'exécute mon script, j'obtiens une erreur de référence indiquant que uName n'est pas défini.Référence Erreur pour la propriété de l'objet Javascript

Voici le code relivant:

function DataSet() 
{ 
    this.uName = ""; 
    this.dField = ""; 
    this.qUrl = "http://api.bfbcs.com/api/pc?players="+uName+"&fields="+dFeilds; 
    this.data = ""; 

    this.dQuery = dQuery; 
    this.execQuery = execQuery; 

Selon toutes les sources que j'ai trouvé, je ne devrais pas besoin d'utiliser le mot-clé var, et quand je fais comprendre cela, il jette d'autres erreurs.

Que pourrait-il se passer?

Merci

Répondre

4

Eh bien, oui, la variable uNamen'est pas défini, dans l'extrait que vous avez publié. Ni dQuery ou execQuery, ou dFeilds (orthographe!). Viennent-ils d'autres codes que vous ne nous avez pas montrés?

Il existe une propriété this.uName, mais les propriétés d'objet sont complètement différentes des variables en JavaScript. Contrairement à Java, ils ne partagent pas un espace de noms.

De plus, vous devez coder les paramètres d'URL. par exemple .:

this.qUrl = "http://api.bfbcs.com/api/pc?players="+encodeURIComponent(this.uName)+"&fields="+encodeURIComponent(this.dField); 
+1

@OP: À la suite de points de Bob, 'this' en Javascript est * très différent * de 'this' dans des langages comme C, C# ou Java. Ne laissez pas le nom similaire et (à certains égards) une fonctionnalité similaire vous tromper. Entre autres choses, vous ne pouvez jamais laisser de côté ceci comme vous pouvez dans les autres, ce n'est jamais supposé en Javascript. –

+0

@bobince, Merci, J'ai apporté les modifications appropriées et modifié l'URL. tout fonctionne correctement maintenant. – joejoeson

+0

Ajout d'un 'this. 'devant' dField' dans l'URL. –

1

Je ne sais pas ce que vous essayez de faire, mais je ne vois pas votre fonction de réception de ces paramètres:

function DataSet(uName,dFeilds,dQuery,execQuery) 
{ 
    this.uName = ""; 
    this.dFeild = ""; 
    this.qUrl = "http://api.bfbcs.com/api/pc?players="+uName+"&fields="+dFeilds; 
    this.data = ""; 

    this.dQuery = dQuery; 
    this.execQuery = execQuery; 
+0

Dans les exemples que j'ai regardés sur le web au W3C, ils n'ont pas transmis les paramètres pour les méthodes comme celles du bas. Ils ont cependant fait pour les propriétés, mais j'ai vu ailleurs que vous pouviez renoncer à cela. Il semble un peu redondant d'avoir à spécifier la variable pour une classe puis spécifier la propriété et assigner la variable à cette propriété .... mais alors il est OK pour mettre à jour cette propriété directement par les méthodes de classe, laissant la variable à seulement ont pour but de créer un emplacement de mémoire défini. Sauf si je pouvais faire quelque chose comme ceci: this.uName = var uName; – joejoeson

+0

Déclarer 'var' n'a rien à voir avec les emplacements de mémoire, il s'agit de spécifier le bloc dans lequel une variable sera locale. Les arguments sont automatiquement des variables locales, vous n'avez donc pas besoin de les "var". – bobince

Questions connexes