Triptychが指摘しているように、ホストオブジェクトのコンテンツでグローバルスコープ関数を見つけて呼び出すことができます。
グローバル名前空間の汚染を大幅に減らすよりクリーンな方法は、次のように関数を直接配列に明示的に置くことです。
var dyn_functions = [];
dyn_functions['populate_Colours'] = function (arg1, arg2) {
// function body
};
dyn_functions['populate_Shapes'] = function (arg1, arg2) {
// function body
};
// calling one of the functions
var result = dyn_functions['populate_Shapes'](1, 2);
// this works as well due to the similarity between arrays and objects
var result2 = dyn_functions.populate_Shapes(1, 2);
この配列は、グローバルホストオブジェクト以外のオブジェクトのプロパティにもなり得ます。つまり、jQueryなどの多くのJSライブラリと同じように、独自の名前空間を効果的に作成できます。これは、同じページに複数の個別のユーティリティライブラリを含める場合に、競合を減らすのに役立ち、(デザインの他の部分で許可されている場合)コードを他のページで簡単に再利用できます。
次のようなオブジェクトを使用することもできます。
var dyn_functions = {};
dyn_functions.populate_Colours = function (arg1, arg2) {
// function body
};
dyn_functions['populate_Shapes'] = function (arg1, arg2) {
// function body
};
// calling one of the functions
var result = dyn_functions.populate_Shapes(1, 2);
// this works as well due to the similarity between arrays and objects
var result2 = dyn_functions['populate_Shapes'](1, 2);
配列またはオブジェクトのいずれかを使用すると、関数の設定またはアクセスのいずれかの方法を使用でき、もちろん他のオブジェクトもそこに格納できます。次のようにJSリテラル表記を使用することで、動的でないコンテンツのどちらかのメソッドの構文をさらに減らすことができます。
var dyn_functions = {
populate_Colours:function (arg1, arg2) {
// function body
};
, populate_Shapes:function (arg1, arg2) {
// function body
};
};
編集:もちろん、より大きな機能ブロックの場合は、コード機能を体系的にカプセル化する一般的な方法である非常に一般的な「モジュールパターン」に上記を拡張できます。