如何在javascript模块之间进行通信......?

时间:2013-09-28 10:42:32

标签: javascript jquery oop module

在我的应用程序中有几个模块可以自己负责,这就是我有些困惑的地方..

  1. 如何在模块之间进行通信?

  2. 如何通知或聆听模块之间的决策以适当的方案..?

  3. 示例:

    模块1,

    var MyModule1 = (function() {
      var myPrivateData = 303;
      function myPrivateFunction() {
        alert('private');
      }
      return {
        myPublicData : 42,
        myPublicFunction : function() {
          alert('public');
        }
      };
    })();
    

    第2单元

    var MyModule2 = (function() {
      var myPrivateName = privatized;
      function myPrivateFunction() {
        alert(myPrivateName) ;
      }
      return {
        myPublicData : 42,
        myPublicFunction : function() {
          alert('public');
        }
      };
    })();
    

    我怎样才能让他们互相沟通,互相倾听......?有人可以用一些小例子澄清一下吗?我需要共享与module2共享的privateData和与module1共享的myPrivate名称,以及触发任何click事件。

    提前致谢!

2 个答案:

答案 0 :(得分:3)

以下是浏览器中松耦合模块组织的基本概念:

当module1中的代码需要通知其他人某些事件时,它会执行此操作:

$(document).trigger( "some:event", someData);

如果需要通知“some:event”,那么module2将在其初始化代码中执行此操作:

$(document).on( "some:event", function(evt,someData) {
   // ... do something with the data ...
} );

在此模式中,两个模块完全独立。他们唯一要知道的是与他们沟通的事件的名称。

答案 1 :(得分:0)

像这样的东西

    var ParentClass = (function() {
     var privateVariable = 'toto';
     this.publicVariable = 'titi';

     this.ChildClass = new ChildClass(this);
     this.ChildClass.execute();
    });

    function ChildClass(parent) { this.parent = parent; return this; };

    ChildClass.prototype.execute = function() {
     alert (this.parent.publicVariable); // show titi
    };

ParentClass();