使用命名空间调用外部文件中的函数

时间:2015-07-29 08:45:27

标签: javascript

假设我有2个文件,我们称之为file1和file2。假设file1有一个名为func1()的函数,file2有一个名为func2()的函数

所以file1看起来像这样:

   function func1() {
      alert("func1 called");
   }

和file2看起来像这样:

function func2() {
      alert("func1 called");
}

如果我在html的head部分中的file2之前加载了file1,那么我可以(在file2中)调用func1,如下所示:

function func2() {
    func1();
}

但是现在......我想要做的是使用命名空间来调用它。这就是我遇到麻烦的地方。我已经阅读了很多关于JavaScript命名空间的内容,但我找到的最彻底的是:http://addyosmani.com/blog/essential-js-namespacing/#beginners

然而问题(就像我发现的其他例子一样)是理论/阅读太多了(这不是一个问题,因为它教了很多)。当我读完所有内容时,我的头脑是如此的充满和混乱(我是编程的新手,因此无法处理这么多)。我在该示例/链接中缺少的是一个解释,告诉我如何使用2个单独的文件来工作。

所以我想我可以在file1中做这样的事情:

var namespaceFile1 = namespaceFile1 || {};

function func1() {
    alert("func1 called");
}

我现在想要做的是使用命名空间调用func1,如下所示:

function func2() {
  namespaceFile1.func1();
}

尝试上面的解决方案,我得到一个JS错误,说明namespaceFile1不存在,即使我声明它说:var namespaceFile1 = namespaceFile1 || {};

我该怎么做?提前致谢

2 个答案:

答案 0 :(得分:2)

您已经创建了一个"命名空间" (它只是一个包含对象的变量),但是您已将该函数设置为全局函数,而不是将其放在该命名空间中。

android:id="@+id/cftvMainTitleWithIv"
android:layout_width="match_parent"
android:layout_height="@dimen/login_title_height"
android:textColor="@android:color/white"
android:drawableLeft="@drawable/ic_drawer"
android:background="@android:color/holo_red_light"
android:gravity="center"
android:text=""
  

我收到一个JS错误,说明namespaceFile1不存在

如果它声称,那么您在加载定义var namespaceFile1 = namespaceFile1 || {}; namespaceFile1.func1 = function func1() { alert("func1 called"); } 的JS文件之前尝试调用namespaceFile1.func1()

根据您显示的代码,我希望它说namespaceFile1不存在(即"不是功能"而不是"而不是" #34;无法访问undefined")的属性。

但你可能有两个错误。在尝试调用函数之前,请确保加载定义函数的脚本。

答案 1 :(得分:0)

加载2个js文件就像连接它们一样。 你的代码应该是:

var namespaceFile1 = {};

namespaceFile1.func1 = function () {
    alert("func1 called");
}

function func2() {
  namespaceFile1.func1();
}

当你谈到“命名空间”时,它实际上是一个添加属性或功能的对象。