Domanda

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);

sto chiamando questo codice usando

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

, ma il 'id' e opzioni sembra essere non definito.
Qualcuno può aiutarmi?

È stato utile?

Soluzione

Il tuo MyLibrary.MyModule stessa è undefined. Questo è perché si sta invocando una funzione anonima senza alcun valore di ritorno da assegnare ad esso.

presumo che volevi fare questo, invece:

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);
        };

Ora si può fare:

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

... e il 'c' e options sarà ricevuto come argomenti al costruttore.

Se il vostro scopo per il espressione di una funzione immediatamente invocato è stato quello di chiudere intorno ad alcuni valori di default che il costruttore potrebbe fare riferimento, quindi l'IIFE sarebbe bisogno di ritorno una funzione che i riferimenti tale valore.

Altri suggerimenti

Come scritto, non credo che sta andando a fare qualcosa di simile quello che vuoi. Stai inizializza "MyLibrary.MyModule" di essere praticamente nulla; non c'è alcun valore di ritorno da quel "inizializzare" la funzione, e si sta chiamando come se avesse uno.

non posso dire quello che stai cercando di fare, ma:

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

mezzi, "chiamano la funzione di qualsiasi , con una lista di argomenti che consiste dei valori della variabile 'id' e variabili 'opzioni', e quindi impostare la proprietà 'MyModule' sull'oggetto a cui si riferisce "MyLibrary" a qualsiasi valore viene restituito da questa chiamata di funzione ".

Quando il fumo si dirada, "MyLibrary.MyModule" non sarà una funzione, per quanto posso dire. Forse, se si spiega che cosa volete che significhi, poi qualcuno può aiutare risolvere il problema.

Si desidera qualcosa di simile:

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'
        },
    }
};
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top