Вот, пожалуйста, сохраните существующие объекты:
var namespace = function(name, separator, container){
var ns = name.split(separator || '.'),
o = container || window,
i,
len;
for(i = 0, len = ns.length; i < len; i++){
o = o[ns[i]] = o[ns[i]] || {};
}
return o;
};
например. Использование:
namespace("com.example.namespace");
com.example.namespace.test = function(){
alert("In namespaced function.");
};
или для вашего примера использование массива.
var ns = ['bob', 'sue', 'dan'];
namespace(ns.join('.'));
bob.sue.dan.foobar = true;
или расширение существующего объекта:
var bob = {}
namespace("foo.bar",".",bob);
bob.foo.bar = true;
Редактировать: обновляется в соответствии с запросом:
var namespace = function(name, separator, container, val){
var ns = name.split(separator || '.'),
o = container || window, i, len;
for(i = 0, len = ns.length; i < len; i++){
var v = (i==len-1 && val) ? val : {};
o = o[ns[i]] = o[ns[i]] || v;
}
return o;
};
namespace("bob.sue.dan",null,null,5);
alert(bob.sue.dan);
См. Рабочий пример: http://jsfiddle.net/herostwist/hu6j9/