我知道我在使用命名空间时做了一些极其错误的事情。我在网上/谷歌搜索中研究了一吨之后发布了这个问题。还是找不到我做错了什么。你能帮帮我吗? 这就是我所拥有的
的Javascript
Javascript file1
(function (js_namspace1, $, undefined) {
js_namespace1.n1function1 = function(){
var return_obj = {
return_function_to_call: “n1function_name2”
return_function_to_call_namespace: “js_namespace1”
}
js_namespace2.n2function1(return_obj)
}
Js_namespace1.n1function_name2 =function(list_of_names){
Js_namespace1.list_of_names = list_of_names
// do some processing to js_namespace1. list_of_names
}
}
(window. js_namspace1 = window. js_namspace1|| {}, jQuery ));
Javascript file2
(function (js_namspace2, $, undefined) {
js_namespace2.n2function1(return_obj) = function(return_obj){
js_namespace2.return_function_to_call = return_obj.return_function_to_call
js_namespace2.return_function_to_call_namespace = return_obj. .return_function_to_call_namespace
// do some processing
Js_namespace2.list_of_names = []
Js_namespace2. list_of_names.push(value_name)
window[js_namespace2.return_function_to_call_namespace][js_namespace2.return_function_to_call]( Js_namespace2.list_of_names);
}
}
(window. js_namspace2 = window. js_namspace2|| {}, jQuery ));
HTML
从html file1调用js_namespace1.n1function1,根据最终用户点击字段
// js_namespace1.n1function1
调用js_namespace2.n2function1
并显示另一个html file2
//在html file2中处理数据(收集名称的值),然后调用返回函数Js_namespace1.n1function_name2
在Js_namespace1.n1function_name2
中,处理Js_namespace1.list_of_names(array)
,但当我执行此操作时,它也会在Js_namespace2.list_of_names
中更改
例如当我这样做的时候
Js_namespace1.n1function_name2.push(add_another_name)
,然后致电js_namespace1.n1function1
(后者又调用js_namespace2.n2function1
)。 Js_namespace2.list_of_names
包含add_another_name
的值。
请注意,从js_namespace2.n2function1
调用js_namespace1.n1function1
时,数组不会作为参数传递。
我的期望是js_namespace1.n1function1
调用js_namespace2.n2function1
时无法使用Js_namespace2.list_of_names
更新 add_another_name
。
你能解释一下发生了什么吗?最重要的是指出我在这个设计中应该避免的任何错误(名称空间,函数调用之间的参数交换)。我是否在javascript中正确使用了命名空间 - 建议使用哪种最佳做法?
答案 0 :(得分:0)
这里有一个link来自Google快速搜索JS的最佳做法。那里有不同的思想流派(例如use of terminating semicolons),但如果你不注意的话,使用某种短语可能会帮助你弄清楚代码中的拼写错误,区分大小写和无意的空白为自己。以下是您的代码,其中包含一些修复:
(function (js_namespace1, $, undefined) {
js_namespace1.n1function1 = function(){
var return_obj = {
return_function_to_call: "n1function_name2",
return_function_to_call_namespace: "js_namespace1"
};
js_namespace2.n2function1(return_obj)
};
js_namespace1.n1function_name2 =function(list_of_names){
js_namespace1.list_of_names = list_of_names;
console.log(js_namespace1.list_of_names); // ["some_name"]
};
}
(js_namespace1 = window.js_namespace1 || {}, jQuery));
(function (js_namespace2, $, undefined) {
js_namespace2.n2function1 = function(return_obj){
js_namespace2.return_function_to_call = return_obj.return_function_to_call;
js_namespace2.return_function_to_call_namespace = return_obj.return_function_to_call_namespace;
// do some processing
js_namespace2.list_of_names = [];
js_namespace2.list_of_names.push("some_name");
window[js_namespace2.return_function_to_call_namespace][js_namespace2.return_function_to_call]( js_namespace2.list_of_names);
};
}
(js_namespace2 = window.js_namespace2 || {}, jQuery));
js_namespace1.n1function1();
关于您的代码和我的修复的一些要点:
js_namespace2
使用了Js_namespace2
等区分大小写的名称。js_namespace2.n2function1(return_obj) = function(return_obj)
。return_obj. .return_function_to_call_namespace
和其他人。value_name
未定义我测试了代码here并查看了预期的行为。