我正在努力为自己建立一个requireJS的替代品。
所以我做的事情就像
define('Namespace.test.Test').define(function(){ return 'test'})
现在我需要能够分配Namespace.test.Test === 'test'
。
var objects = moduleName.split('.'), //moduleName === 'Namespace.test.Test'
module = Namespace;
for(var i = 1; i < objects.length; i++) {
module = module[objects[i]] = module[objects[i]] || {};
}
但是当我做module = defineCallback
时,它只是替换模块变量而不是Namespace.test.Test
变量。
我还没有完全理解的一种肮脏方式是做这样的事情:
Namespace[objects[1]][objects[2]]
答案 0 :(得分:3)
不要一直循环到最后一个项目。保留一个可用于访问该属性的内容:
for(var i = 1; i < objects.length - 1; i++) {
module = module[objects[i]] = module[objects[i]] || {};
}
var name = objects[objects.length - 1];
module[name] = defineCallback();