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

...そしてandは'c'optionsコンストラクターへの引数として受け取られます。

即時に呼び出される関数式の目的が、コンストラクターが参照できるデフォルト値を閉じることである場合、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 に答える