Je veux créer une propriété statique pour une classe nommée OUTERCLASS. Je veux que la valeur de cette propriété soit une instance d'une autre classe, nommée Voici la classe intérieure. Il a une propriété et une fonction. P> et voici la classe externe, qui n'a qu'une seule propriété statique. P> innerclass code>.
// myScript.gs
function myScript() {
console.log(OuterClass.innerClass.myProperty); // 42.0
console.log(OuterClass.innerClass.myFunction()); // TypeError: Cannot find function myFunction in object [object Object].
var anotherInnerClassInstance = new InnerClass();
console.log(anotherInnerClassInstance.myFunction()); // 43.0
}
3 Réponses :
Comme d'autres ont mentionné dans la question de la question, votre code fonctionne bien pour moi être un script unique ou trois fichiers différents. La seule chose que j'ai faite (comme Diego a déjà dit) change code> code> pour LOGGER code>
. P>
sur l'exécution de la fonction [19-12-05 01: 23: 28: 198 PST] 42.0 P>
[19-12-05 01: 23: 28: 199 PST] 43.0 P>
[19-12-05 01: 23: 28: 199 PST] 43.0 P>
blockQuote>
Aussi si vous souhaitez toujours coder dans pure myscript () code> i Obtenez les journaux suivants dans les applications d'applications (comme prévu): p>
javascript code> ou
dactylographie code> et ultérieurement sur
script d'applications code> Je suggérerais d'utiliser
Fermoir code> . P>
J'ai ajouté à mon message un lien vers la feuille Google produisant l'erreur. Je suis surpris que d'autres ne puissent pas répliquer l'erreur. Cela pourrait être un indice sur la cause de la racine.
La solution de contournement que j'ai fini par utiliser était d'utiliser un getter to paresseux-initialiser l'instance de classe de propriété statique. C'est un peu plus verbeux, mais de cette façon, la levage n'est pas un problème.
ordre d'analyse strong> Bien que je ne connaisse pas exactement em> comment les fichiers de script ont été analysés en interne dans Rhino Runtime (et que votre projet suggère que vous l'avez utilisé, et non le NEWER V8), dans le Guide de migration, il est mentionné que l'ordre des fichiers N'importe pas dans Rhino , alors supposons que le codebase est concaténé dans un gros morceau avant d'être analysé. p> Il semble que le processus soit quelque peu dépendant de l'ordre de création de fichiers . J'ai réussi à reproduire systématiquement votre problème dans Rhino en inspectant l'ordre des appels en utilisant des fermetures simples, jetez un coup d'œil: p> comme prévu, l'ordre des appels dans le journal est aussi suit lorsque vous exécutez maintenant, si vous Allumez le code dans les fichiers, les journaux ont l'air différent (ce qui vous permet de rechercher ce que vous vouliez): p> Celui que vous avez fourni avec une chargement paresseux (motif singleton) devrait suffire. Je ne suggérerais que d'utiliser l'inversion de dépendance pour vous donner plus de flexibilité et de rendant Cette fois, tout fonctionne comme prévu dans n'importe quelle direction : P> testcp code> em>: p>
innerclass code> une dépendance rigoureuse: p>
Puis-je vous poser une question sur la méthode de réplication de votre numéro de
TypeError: impossible de trouver la fonction MyFunction dans l'objet [Objet Objet] CODE> AT
OUTERCLASS.INNERCLASS.MYFUNCTION () CODE>? Parce que lorsque
myscript () code> est exécuté une fois que votre script a été copié et collé à l'éditeur de script, aucune erreur ne se produit. Et le journal affiche
42 code>,
43 code> et
43 code>.
Votre exemple fonctionne à Chrome pour moi, c'est que Google Apps scripts n'est pas construit sur V8?
Lorsque vous savez que le hisser est le problème, pourquoi ne pas tout garder dans l'ordre comme vous êtes collé ici?
MyFunction code> est la fonction prototype. Alors l'ordre n'a pas d'importance. Sa partie de
__ proto __ code> et qui est partagée dans toute l'instance. Il sera donc attaché à tous les insaces de votre class intérieure. Votre exemple fonctionne bien dans n'importe quel ordre
Pouvez-vous s'il vous plaît décrire votre structure de fichiers? Je copie / collé votre code, modifié Console.log vers Logger.log, le faisait sans aucun problème et reçu la sortie attendue.
@Tanaike et Daniel Lizik Depuis ce code correspondent au script Google Apps, je finirai éventuellement à exposer des fonctions à utiliser dans des feuilles de calcul. Ces fonctions utiliseront ces classes. Pour les tests de base, les fonctions de la classe peuvent être exécutées manuellement dans l'éditeur de script (j'utilise les fiches Google, en particulier.)
@Az_ Bonne pratique dicte que les classes devraient être dans leurs propres fichiers.
@Tall car cela peut être un problème spécifique au script Google Apps, je changerai "JavaScript" dans mon poste de poste sur "Script Google Apps".
@DieGo dans ma structure de fichiers actuelle, chaque morceau de code indiqué est un fichier GS distinct. Je vais clarifier cela dans mon post.
@Cameronhudson Je l'ai séparé dans 3 fichiers: inner.gs, externe.gs et code.g Je ne peux toujours pas reproduire votre problème. Si vous créez un nouveau projet avec juste ce code, obtenez-vous le même résultat?
Est-ce que cela répond à votre question? Quelle édition de ECMA-262 est-elle prise en charge Google Apps Script?
@Daniellizik Nope. J'ai ajouté à mon message un lien vers la feuille Google produisant l'erreur.