6
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”和选项。
有人可以帮忙吗?

4

3 回答 3

7

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

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

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

意思是,“使用由变量“id”和变量“options”的值组成的参数列表调用函数,然后将“MyLibrary”引用的对象上的属性“MyModule”设置为从该对象返回的任何函数调用。”

据我所知,当烟雾散去时,“MyLibrary.MyModule”将不再是一个函数。也许如果你解释你想要它的意思,那么有人可以帮助解决它。

于 2011-01-20T18:44:00.810 回答
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'andoptions将作为构造函数的参数接收。

如果您对立即调用的函数表达式的目的是关闭构造函数可以引用的某个默认值,那么 IIFE 将需要返回一个引用该值的函数。

于 2011-01-20T18:45:50.763 回答
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'
        },
    }
};
于 2011-01-20T18:46:22.030 回答