这个问题已经在这里有了答案:

我知道我在使用命名空间时犯了严重错误。 我在网络/谷歌搜索中研究了一吨后发布了这个问题。 仍然找不到我在做什么错。 你能帮我吗? 这就是我所拥有的

使用Javascript

Javascript文件1

(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文件2

(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_namesadd_another_name

您能解释一下发生了什么吗? 最重要的是指出在设计中应该避免的任何错误(命名空间,函数调用之间的参数交换)。 我是否在javascript中正确使用了名称空间-有什么推荐的最佳做法?

===============>>#1 票数:0

这是来自Google的快速搜索链接 ,其中包含JS的最佳做法。 那里有不同的思想流派(例如, 使用终止分号 ),但是,如果您不自己注意,则使用某种短绒毛毡可能会帮助您找出错别字,区分大小写和代码中意外的空格。 以下是带有一些修复程序的代码:

(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_namespace2Js_namespace2
  • 您的语法错误js_namespace2.n2function1(return_obj) = function(return_obj)
  • 在这里: return_obj. .return_function_to_call_namespace return_obj. .return_function_to_call_namespace等。
  • 未定义value_name

我在这里测试了代码,看到了预期的行为。

  ask by Jack tileman translate from so

未解决问题?本站智能推荐:

3回复

扩展JavaScript名称空间

我是在做错什么还是这是不可能的: 然后,我尝试“扩展”上述名称空间并添加一个新方法: 警报显示属性undefined ,并引发test()方法错误。 谢谢。
1回复

了解JavaScript中的名称空间[重复]

这个问题已经在这里有了答案: 如何在回调中访问正确的“ this”? 10个答案 “ this”关键字如何工作? 22个答案 尽管我对Python有一定的编程经验,但我对JavaScript还是很陌生。 我的问题是,我似乎不了解JS中的名称空间概念,
2回复

JavaScript函数-全局命名空间

在Javascript中,存在一个继承主干模型的函数 在另一个JS文件中,我们以 要求是,所有功能都必须以特定的全局名称空间(例如公司名称“ Google”)作为前缀,而不是通用关键字“ window”。 我们如何实现呢? 我尝试了以下方法,但没有成功。
2回复

如何使用javascript名称空间?

我正在尝试找出JavaScript命名空间...我想编写几个函数并将其保护在如下所示的命名空间中。.但是我想我做得不太好。.这个问题太简单了,但是为我清除,我想如果我明白为什么这行不通.. 这是我正在尝试的exp: 致电myApp: 我认为MyApp是正确创建的,但是我不确
3回复

JavaScript名称空间对象文字

最近,我遇到了JavaScript命名空间,以及如何使用它们来像其他流行的OOP语言一样创建命名空间。 我对如何声明它们感到困惑。 例如, var myNamespace = myNamespace || {}; 如果尚未创建名为myNamespace的名称空间,则创建一个名称空
5回复

JavaScript嵌套名称空间中的继承

我想设置嵌套的名称空间来组织我的代码。 我试图按照中所描述的插件状结构这篇文章 。 问题是我不理解如何在示例中访问this.error_msg 。 我设置正确吗? 我必须使用jQuery .extend或.prototype来访问this.error_msg吗? 演示: http
1回复

Javascript模块化名称空间模式

我正在尝试使用模块化的名称空间模式,该模式允许我扩展各种名称空间中的可用功能,并在多个文件中定义它们。 这是我正在使用的模式; 如何在命名空间函数定义之前使它们可用? 换句话说,如何在不依赖于已解析函数声明的情况下调用Namespace.SubSpace.Func() ?
26回复

如何在JavaScript中声明名称空间?

如何在JavaScript中创建名称空间,以使我的对象和函数不会被其他同名对象和函数覆盖? 我使用了以下内容: 有没有更优雅或更简洁的方法?
2回复

OOP,名称空间的顶级方法内的私有函数

我有一个声明命名空间的js脚本,然后有一个名为run()的方法,我可以在一个像myNamespace.run()这样的XUL脚本中调用它: 我希望能够调用getSelText()内myNamespace.run()无需申报getSelText()作为另一顶级功能myNamespace 。
1回复

重写JavaScript库并将其添加到我的名称空间

我打开了一个名为Jibberish( https://github.com/mdp/gibberish-aes )的JavaScript项目,并试图了解它的编码风格,我只给出了一部分的开头和结尾: 只是了解一下它的用法: 我可以看到最外层的自执行函数在代码末尾返回一个对象,该对象