是否可以确定整个javascript文件的范围?

时间:2015-06-13 01:05:42

标签: javascript namespaces scope

说我有一个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'代码在同一个文件中,我不希望他们负责以对象格式编写代码。我试图尽可能地为这两个人愚弄它。括号混淆了他们。

1 个答案:

答案 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事件

还要记住,除非明确添加到窗口对象

,否则在函数内声明的任何函数或变量都不在窗口范围内