说我有一个javascript文件:
function foo(){ alert("I am foo!"); }
现在我想导入那个javascript,但我希望从特定的命名空间或范围调用foo。例如,a.foo(),b.foo()等
function foo(){ alert("I am foo also!"); }
a.foo(); // alerts "I am foo!"
b.foo(); // alerts "I am foo also!"
有一种简单的方法吗?
编辑:我个人认为SO用户不应该负责解释他们提出问题的理由,但这里是:我希望用户能够创建一个javascript具有某些功能的文件,如show()和hide(),然后我使用该文件,基本上使用eric.show(),todd.show()等。但我不想要Eric和Todd'代码在同一个文件中,我不希望他们负责以对象格式编写代码。我试图尽可能地为这两个人愚弄它。括号混淆了他们。
答案 0 :(得分:0)
除非你想通过ajax调用文件,或者可能像以前一样使用第三方模块,你总是可以利用window对象并添加一个新对象(你的命名空间),如下所示:
你的HTML:
<html>
<!-- the stuff you have in your html file -->
<script src="path/to/file1.js">
<script src="path/to/file2.js">
</html>
文件1:
window.namespace = { //or var namespace = {... since window holds all variable scope in modern browsers
foo:function(){
alert('I am foo');
}
};
文件2:
function foo(){
alert('I am foo too');
}
//not using $(document).ready() because op didn't mention using jquery
document.addEventListener('DOMContentLoaded', function (event) {
//you can directly call anything in window scope in most browsers so
namespace.foo(); //I am foo
//or
window.namespace.foo(); //I am foo
foo(); //I am foo too
});
请记住,在访问它们之前必须确保两个文件都有机会加载,因此DOMContentLoaded事件
还要记住,除非明确添加到窗口对象
,否则在函数内声明的任何函数或变量都不在窗口范围内