шаблон проектирования javascript: как создать субмодуль и получить доступ к частным переменным и функциям родительского модуля - PullRequest
3 голосов
/ 22 октября 2011

У меня есть следующее:

mod.a = (function() {
    var myPrivateVar = 'a';
    function myPrivateFct() {
        //do something I will need in my sub-module (mod.a.b)
    }
    return {
        //some public functions
    }
})();

mod.a.b = (function() {
    // some local vars and functions

    return {
          mySubModuleFct:function() {
              // here I want to call mod.a.myPrivateFct();
          }
})();

Я хочу создать субмодуль и вызвать приватную функцию из моего родительского модуля mod.a.Как я могу сделать это, следуя рекомендациям шаблона модуля?

Ответы [ 2 ]

2 голосов
/ 28 октября 2011

Коллега показал мне, как это сделать. Это на самом деле очень элегантно.

mod.a = (function() {
    var myPrivateVar = 'a';
    function myPrivateFct() {
        //do something I will need in my sub-module (mod.a.b)
    }
    return {
        b: {
            bPublicMethod:function() {
                myPrivateFct(); // this will work!
            }
        }
        //some public functions
    }
})();

//call like this
mod.a.b.bPublicMethod(); // will call a.myPrivateFct();
1 голос
/ 22 октября 2011

Я бы предложил использовать код простого наследования Джона Резига для более объектно-ориентированного подхода к javascript:

http://ejohn.org/blog/simple-javascript-inheritance/

Позволяет написать это:

var Person = Class.extend({
  init: function(isDancing){
    this.dancing = isDancing;
  }
});
var Ninja = Person.extend({
  init: function(){
    this._super( false );
  }
});

var p = new Person(true);
p.dancing; // => true

var n = new Ninja();
n.dancing; // => false 
...