2009-12-27 2 views
0

Quelqu'un peut-il m'aider s'il vous plaît à comprendre le scoop des variables JavaScript, et comment les atteindre?Besoin d'aide pour atteindre une variable en JavaScript?

Imaginez ce qui suit ...

// Namespace declaration 
var p = {}; 

p.result = { 

    searchForm: $('#search-form'), 
    searchAction: this.searchForm.attr('action'), 

    anotherSection: { 
     hello: 'Hello ', 
     world: this.hello + 'world!' 
    } 

} 

Cela ne fonctionnera pas, et il donne l'erreur en disant this.searchForm est indéfini. La même erreur apparaît également dans anotherSection (ofc).

Comment puis-je déclarer une variable en termes d'une autre variable dans le même espace de noms?

Répondre

3

Le mot clé this est lié au contexte de fonction , vous ne pouvez pas l'utiliser dans des littéraux d'objet de ce type.

Vous pouvez, créer des fonctions comme "getters":

var p = {}; 
p.result = { 
    searchForm: $('#search-form'), 
    getSearchAction: function() { 
    return this.searchForm.attr('action'); 
    }, 
    anotherSection: { 
    hello: 'Hello ', 
    getWorld: function() { 
     return this.hello + 'world!'; 
    } 
    } 
}; 
+0

+1 pour l'exemple de modification et de code. Je pense que cela ressemble à une bonne solution :) – Mickel

+0

Vous pouvez l'optimiser en utilisant 'this.getWorld = this.hello + 'world!'; renvoie this.getWorld' pour qu'il ne concatène la chaîne que la première fois qu'elle est appelée. – Etan

0

ce est un objet, donc lorsque vous utilisez this.searchForm, vous accédez à une propriété du cet objet. Vous voulez juste accéder à une variable, donc vous pouvez simplement utiliser searchForm.

+0

J'ai déjà essayé ça et ça ne marche pas. – Mickel

3

Il n'existe aucun moyen de faire référence à un littéral d'objet au fur et à mesure que vous le construisez.

Vous devez écrire:

p.result = { 
    searchForm: $('#search-form'), 
    anotherSection: { 
     hello: 'Hello ' 
    } 
} 

p.result.searchAction = p.result.searchForm.attr('action'); 
p.result.anotherSection.world = p.result.anotherSection.hello + 'world!'; 
+0

+ 1 merci, mais je vais aller chercher la solution fournie par CMS cette fois. – Mickel

1

Vous ne pouvez pas accéder aux propriétés d'un objet à l'intérieur de son propre littéral - ils ne sont pas encore réunies.

Questions connexes