Передача параметра в функцию закрытия в JavaScript - PullRequest
6 голосов
/ 20 января 2011
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);

Я вызываю этот код, используя

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

, но кажется, что 'id' и параметры не определены.
Может кто-нибудь помочь?

Ответы [ 3 ]

5 голосов
/ 20 января 2011

Ваш MyLibrary.MyModule сам по себе undefined. Это потому, что вы вызываете анонимную функцию без возвращаемого значения для присвоения ей.

Полагаю, вы хотели сделать это вместо этого:

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

Теперь вы можете сделать:

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

... и 'c' и options будут получены как аргументы для конструктора.

Если ваша цель для немедленно вызванного выражения функции состояла в том, чтобы закрыть некоторое значение по умолчанию, на которое может ссылаться конструктор, то IIFE потребуется вернуть функцию, которая ссылается на это значение .

5 голосов
/ 20 января 2011

Как написано, я не думаю, что это будет делать то, что вы хотите.Вы инициализируете «MyLibrary.MyModule», чтобы быть практически ничем;из этой функции «initialize» нет возвращаемого значения, и вы вызываете ее так, как будто она есть.

Я не могу сказать, что вы пытаетесь сделать, но:

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

означает, «вызовите функцию независимо от со списком аргументов, состоящим из значений переменной« id »и переменной« options », а затем установите свойство« MyModule »для объекта, на который ссылается«MyLibrary» к какому-либо значению возвращается из вызова этой функции. «

Когда дым рассеется,« MyLibrary.MyModule »не будет функцией, насколько я могу судить.Возможно, если вы объясните, что вы хотите , чтобы это значило, тогда кто-то может помочь исправить это.

0 голосов
/ 20 января 2011

Вы хотите что-то вроде этого:

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'
        },
    }
};
...