これを行う方法は次のとおりです。
function getValue(namespace, parent) {
var parts = namespace.split('.'),
current = parent || window;
for (var i = 0; i < parts.length; i += 1) {
if (current[parts[i]]) {
current = current[parts[i]];
} else {
if (i >= parts.length - 1)
return undefined;
}
}
return current;
}
var foo = {
bar: {
baz: true
}
};
console.log(getValue('foo.bar.baz')); //true
関数の最初の引数は名前空間 (ドットで区切られた値) で、2 番目の引数はparent
オブジェクトです。parent が指定されていない場合は、それwindow
が使用されます。
親引数を使用したもう 1 つの例:
var str = 'foo.bar.baz';
foo = {
bar: {
baz: true
}
};
result = getValue(str, foo);
console.log(result);
これはjsfiddleの例です。
同様のアプローチが YUI でも使用されています。彼らのアプローチは名前空間パターンと呼ばれます。主な利点は、パッケージ/名前空間のシミュレーションです。このスクリプトと名前空間パターンの唯一の違いは、名前空間関数が値を返すだけでなく、ネストされた構造を作成することです。