Question

MyLibrary.MyModule =
        (
            function initialise() {
                this.id = id;
                this.c = document.getElementById(id);
                this.ctx = this.c.getContext('2d');

                this.properties = {
                    setup: {
                        backgroundColour: options.setup.backgroundColour || 'black'
                    },

                    scale: {
                        show: options.scale.show || true,
                        colour: options.scale.color || 'white'
                    },
                }
                console.log(properties.setup.baseFontSize);
            }
        )(id, options);

J'appelle ce code à l'aide

new MyLibrary.MyModule('c',options);

mais le « id » et les options ne semble pas être défini.
Quelqu'un peut-il aider?

Était-ce utile?

La solution

Votre MyLibrary.MyModule lui-même est undefined. Ceci est parce que vous êtes l'invocation d'une fonction anonyme sans valeur de retour à lui assigner.

Je suppose que vous vouliez faire ceci:

MyLibrary.MyModule = function initialise(id, options) {
            this.id = id;
            this.c = document.getElementById(id);
            this.ctx = this.c.getContext('2d');

            this.properties = {
                setup: {
                    backgroundColour: options.setup.backgroundColour || 'black'
                },

                scale: {
                    show: options.scale.show || true,
                    colour: options.scale.color || 'white'
                },
            }
            console.log(properties.setup.baseFontSize);
        };

Maintenant, vous pouvez faire:

var inst = new MyLibrary.MyModule('c',options);

... et le 'c' et options sera reçu comme arguments au constructeur.

Si votre objectif pour la immédiatement invoqué l'expression de la fonction était de fermer autour une valeur par défaut que le constructeur pourrait faire référence, le Ia vie aurait besoin de retour une fonction références cette valeur.

Autres conseils

Comme écrit, je ne pense pas que ça va faire quelque chose comme ce que vous voulez. Vous initialisez « MyLibrary.MyModule » pour être fondamentalement rien; il n'y a pas de valeur de retour de cette fonction « initialiser », et vous l'appelez comme si elle a un.

Je ne peux pas dire ce que vous essayez de faire, mais:

MyLibrary.MyModule = (function whatever() { /* ... */ })(id, options);

signifie « appeler la fonction quel que soit avec une liste d'arguments consistant en des valeurs de variables « Options id » et variables « », puis définissez la propriété « MyModule » sur l'objet désigné par « MyLibrary » à valeur retournée de cet appel de fonction. "

Quand la fumée se dissipe, « MyLibrary.MyModule » ne sera pas une fonction, pour autant que je peux dire. Peut-être que si vous expliquez ce que vous voulez à dire, alors quelqu'un peut aider à le résoudre.

Vous voulez quelque chose comme ceci:

MyLibrary.MyModule = function(id, options) {
    this.id = id;
    this.c = document.getElementById(id);
    this.ctx = this.c.getContext('2d');

    this.properties = {
        setup: {
            backgroundColour: options.setup.backgroundColour || 'black'
        },

        scale: {
            show: options.scale.show || true,
            colour: options.scale.color || 'white'
        },
    }
};
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top