我正在尝试为自己构建一个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]]

最佳答案

不要一直循环到最后一个项目。保留一个可用于访问属性的属性:

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();

关于javascript - 更新变量引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19896020/

10-13 01:07