在javascript中将参数传递给闭包函数

时间:2011-01-20 18:39:52

标签: closures javascript-objects javascript

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 个答案:

答案 0 :(得分:5)

正如所写,我认为这不会像你想要的那样做。你正在初始化“MyLibrary.MyModule”基本上没什么;这个“初始化”函数没有返回值,而你正在调用它,好像它确实有一个。

我不知道你要做什么,但是:

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

表示“使用包含变量”id“和变量”options“的值的参数列表调用函数无论,然后在由对象引用的对象上设置属性”MyModule“ “MyLibrary”到该函数调用返回的任何值。“

当烟雾消失时,据我所知,“MyLibrary.MyModule”将不是一个功能。也许如果你解释一下你想要它意味着什么,那么有人可以帮助修复它。

答案 1 :(得分:5)

您的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需要返回引用的函数那个价值。

答案 2 :(得分:0)

你想要这样的东西:

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