JavaScriptの閉鎖関数にパラメーターを渡す
-
13-10-2019 - |
質問
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」とオプションは定義されていないようです。
誰かが助けることができますか?
解決
あなたの 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はする必要があります 戻る その価値を参照する関数。
他のヒント
書かれているように、私はそれがあなたが望むようなことをするつもりはないと思います。 「mylibrary.mymodule」を基本的に何もないように初期化しています。その「初期化」関数からの返品値はありません、そして、あなたはそれがそれを持っているかのようにそれを呼んでいます。
私はあなたが何をしようとしているのかわかりませんが、:
MyLibrary.MyModule = (function whatever() { /* ... */ })(id, options);
意味、「関数を呼び出します なんでもいい 変数「ID」と変数「オプション」の値で構成される引数リストを使用し、「MyLibrary」と呼ばれるオブジェクトにプロパティ「myModule」を、その関数呼び出しから返される値に設定します。」
煙が解消されると、「mylibrary.mymodule」は、私が知る限り、関数ではありません。おそらくあなたがあなたを説明するなら 欲しいです つまり、誰かがそれを修正するのを手伝うことができます。
あなたはこのようなものが欲しい:
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'
},
}
};
所属していません StackOverflow