donc j'ai une définition d'objet qui ressemble à ceci:propriétés de l'objet d'accès dans la définition de l'objet
var Foo = window.Foo = {
MIN_ROWS : 10,
MIN_COLS : 10,
NUM_ROWS : (function(){ return Math.max(parseInt(this.params.rows) || 0, this.MIN_ROWS); })(),
// etc...
params: (function(){ /* ... */ })() // parses the GET querystring parameters from the URL and returns as a JSON object
}
Pour la propriété NUM_ROWS
, je veux le mettre comme Foo.params.rows
si elle existe et il est supérieur à MIN_ROWS
, sinon réglez-le sur MIN_ROWS
.
Je l'ai déjà compris la logique pour cela, la seule chose qui me donne du mal est quand je auto-appeler la fonction comme ci-dessus, la variable this
fait référence à window
et non à Foo
que j'attendre à. (Ceci est le message d'erreur que je reçois dans la console: "TypeError: Result of expression 'this.params' [undefined] is not an object."
)
Si je n'invoque pas la fonction elle-même, cela fonctionne parfaitement. Cependant, je voudrais avoir NUM_ROWS
être un nombre entier, pas une fonction, de sorte que je peux y accéder comme Foo.NUM_ROWS
et non Foo.NUM_ROWS()
dans les autres parties de mon code.
Quelqu'un peut-il m'aider s'il vous plaît?
Pour ceux qui conseillent la définition 'params 'avant' NUM_ROWS': je ne pense pas que cela compte. J'ai essayé de déplacer 'params' au dessus de' NUM_ROWS' et j'ai toujours le même message d'erreur. Cette erreur indique que "this.params" [undefined] n'est pas un objet, mais dans ce contexte, le "this" fait référence à l'objet "window" global, pas à l'objet "Foo", comme découvert en insérant 'console.log (this)' au début de ma fonction 'NUM_ROWS'. – gabriel
réponse mise à jour ...en fait, il est tout à fait logique que ce soit window, car il est toujours dans les fonctions appelées fonctions, au lieu d'être appelé comme méthodes ... – back2dos
@gabriel, j'ai jeté un coup d'oeil à ceci, et j'ai changé mon post, vous avez probablement ça a été trié. Cela faisait un moment que je regardais js sans utiliser un framework, donc vous pouvez probablement l'avoir mieux que mon exemple mais j'espère qu'il résout les problèmes que vous aviez avec le mot clé this. –