带有多个文件/模块和全局变量的javascript显示模块模式

时间:2019-02-24 13:20:43

标签: javascript revealing-module-pattern

对于在其他地方提出的问题,我深表歉意,但是我所看到的所有信息并不能真正帮助我理解答案和最佳实践。

我正在尝试将显示模块模式用于javascript。我有一个基本的js文件,其中包含应用程序每一页所需的方法和属性。

然后每个页面都有其自己的js文件,该文件具有自己的唯一函数和变量,但还需要引用基本js文件中的变量。

我似乎真的误解了变量作用域,或者我设置它的方式在某种程度上非常糟糕,因为我得到的结果令人困惑。

问题:

  1. 如果我要构造这种错误,正确的方法是什么?
  2. 如何跨模块正确访问变量?
  3. 我是否可以在文档就绪状态下初始化模块?

我现在正在做的是这样:

var base = (function() {
    init = function() {
        url = $(location).attr('href');
        url = url.substr(-1) === '/' ? url.slice(0, -1) : url;

       segments = url.split('/');

        baseUrl = this.segments[0] + '//' + this.segments[2] + '/';

        resource = this.segments[3];

        this.segments = segments; //need access to this across all pages
        this.resource = resource;  //need access to this across all pages
        this.baseUrl = baseUrl;  //need access to this across all pages
    }
}

    doStuffGlobally = function() {
        //do stuff for all pages
    }

   return {
        init: init,
        baseUrl: this.baseUrl,
        segments: this.segments,
        resource: this.resource
  };
}());
$(document).ready(function() {
    base.init();
}

在另一页上,我正在这样做:

var otherPage = (function() {
    init = function() {
      //do otherPage stuff;
    }
}
doStuff = function() {
    base.doStuffGlobally(); //need to access this.
    console.log(base.segments); //need to access this.
}

   return {
        init: init
  };
}());
$(document).ready(function() {
    otherPage.init();
}

1 个答案:

答案 0 :(得分:1)

您的/etc/xinetd.conf模块不需要init方法,它不需要等待domready,但可以(并且应该)立即运行。所以写

base