假设我有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 || {};
我该怎么做?提前致谢
答案 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();
}
当你谈到“命名空间”时,它实际上是一个添加属性或功能的对象。