我尝试加载一些外部 .js 文件,并且有一些无法解决的命名空间冲突。
我想以某种方式在它们自己的上下文中加载一些文件,将“this
”从指向窗口对象替换为某个自定义命名空间。
例子:
首先.js:
name = "first";
second.js:
name = "second";
在我看来,这种技巧非常有用。有可能吗?
编辑
似乎替换“this
”并不能解决问题,因为它不是 javascript 中标识符解析的默认上下文。这是我的测试代码:
var first = {};
var second = {};
(function(){name = "first";}).call(first);
(function(){name = "second";}).call(second);
document.write('name= '+name+' <br/>\n'); //prints "second"
document.write('first.name= '+first.name+' <br/>\n'); //prints "undefined"
document.write('second.name= '+second.name+' <br/>\n'); //prints "undefined
有什么想法吗?
决议
这不可能。我最终比今天早上更聪明,我放弃了。
我向任何有类似问题并且可能想尝试一下的人推荐这些启发性的阅读 Material :
http://jibbering.com/faq/notes/closures/
http://softwareas.com/cross-domain-communication-with-iframes
最佳答案
我的一个想法是在不需要修改外部 JavaScript 文件的情况下以 AJAXy 方式获取 JavaScript 文件的内容(取决于你如何做),然后将其全部放入函数中使用new Function(code)
方法,然后使用 new
初始化它:
surrogateWindow = new new Function(jsCode)();
那么surrogateWindow
就是那个代码的this
。我认为这个想法应该可行。
关于javascript - 我可以在 'window' 以外的上下文中加载 javascript 文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4122192/