是否可以限定整个 JavaScript 文件的范围

Is it possible to scope an entire javascript file?

本文关键字:JavaScript 文件 范围 是否      更新时间:2023-09-26

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

除非你想通过 ajax 调用文件,或者像以前一样使用第三方模块,否则你总是可以利用窗口对象并添加一个新对象(你的命名空间)如下:

您的网页:

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

另请记住,在函数内声明的任何函数或变量都不在窗口范围内,除非显式添加到窗口对象