【问题标题】:namespace implementation in javascriptjavascript中的命名空间实现
【发布时间】:2026-01-22 23:00:01
【问题描述】:

我使用以下格式来避免可能的命名冲突。 我的主要目标是在开发过程中将程序的各个部分保存在不同的文件中,然后再将它们组合起来 编辑器是

main.js

Editor=function(){
    this.manage=function(){

    }

}
var editor= new Editor;

a.js

Editor.prototype.A=function(){
        this.afunct=function(){

       }
}

b.js

Editor.prototype.B=function(){
      var this.var1;
      var this.var2;
      this.bfunct=function(){
           //call afunct() here
      }
}

A 是一组功能,可以进行一些测试、修改等。 afunct 是一个测试器函数,需要在所有其他文件中使用。 B 应该充当数据包,并且将创建它的新实例以进行传递。

如何在 bfunct 中调用 afunct? 请帮助我了解如何做到这一点。提前谢谢你。

附言。我是 Javascript 的新手,请原谅我的逻辑中的任何缺陷。

【问题讨论】:

    标签: javascript namespaces


    【解决方案1】:

    这很模糊,但这可能会做到:

    (function() {
    
        var Editor = function() {
    
        };
    
        Editor.prototype = {
            A: {
                afunct: function() {
                    // Other functionality here.
                }
            },
            B: {
                bfunct: function() {
                    Editor.prototype.A.afunct.call(this);
                }
            }
        };
    
        window.Editor = Editor;
    
    })();
    
    
    var editor = new Editor();
    
    editor.B.bfunct();
    

    【讨论】:

    • 命名空间。你在哪里variable = new something; etc etc..
    • @Eli 我猜,但你在一个无限循环中,OP 只想从 B 调用 A,而不是从 A 调用 B
    • 啊,你说得对(很好)。我只是想证明您可以从另一个方法调用任何一种方法。我会再次更新:)
    • 另外,你能告诉我为什么要执行这个函数(包裹在(function(){})()?
    • B 的实例需要在编辑器内部而不是外部创建。
    【解决方案2】:

    从 B 内部这应该可以工作

    Editor.A.apply(this)
    

    【讨论】:

    【解决方案3】:

    Editor.prototype.B内部试试这个:

    Editor.prototype.B=function(){
          var this.var1;
          var this.var2;
          var self = this;
          this.bfunct=function(){
               //call afunct() here
               self.prototype.B.afunct();
          }
    }
    

    【讨论】: