Frage

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

Ich nenne diesen Code mithilfe

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

Aber die "ID" und Optionen scheint nicht definiert zu sein.
Kann jemand helfen?

War es hilfreich?

Lösung

Dein MyLibrary.MyModule selbst ist undefined. Dies liegt daran, dass Sie eine anonyme Funktion ohne Rückgabewert anrufen, um sie zuzuweisen.

Ich nehme an, Sie wollten dies stattdessen tun:

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

Jetzt können Sie:

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

...und die 'c' und options wird als Argumente an den Konstruktor empfangen.

Wenn Ihr Zweck für die Sofort aufgerufene Funktionsausdruck war, einen Standardwert zu schließen, auf den der Konstruktor verweisen konnte, dann müsste das IIF Rückkehr Eine Funktion, die diesen Wert bezieht.

Andere Tipps

Wie geschrieben, glaube ich nicht, dass das so etwas tun wird, was Sie wollen. Sie initialisieren "mylibrary.mymodule", um im Grunde nichts zu sein. Es gibt keinen Rückgabewert aus dieser "initialisierenden" Funktion, und Sie nennen sie so, als hätte sie einen.

Ich kann nicht sagen, was Sie versuchen zu tun, aber:

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

bedeutet: "Rufen Sie die Funktion auf wie auch immer Mit einer Argumentliste, die aus den Werten der variablen "ID" und der variablen "Optionen" besteht, und dann die Eigenschaft "MyModule" auf das von "Mylibrary" genannte Objekt auf den Wert, den von diesem Funktionsaufruf zurückgegeben wird, festlegen.

Wenn der Rauch klärt, ist "Mylibrary.Mymodule", soweit ich das beurteilen kann, keine Funktion. Vielleicht, wenn Sie erklären, was Sie wollen Es bedeutet, dann kann jemand helfen, es zu reparieren.

Du willst so etwas:

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'
        },
    }
};
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top