将* .js文件的内容放入Object中

时间:2015-04-07 17:27:40

标签: javascript

我有一个包含大量全局对象的javascript文件。也就是说,我有很多以下类型的代码:

var foo = 5;
var bar = "string";

var getStuff = function () {
    //...getStuff
}

问题:将此文件的全部内容放入对象中,最简单的方法是什么?

在我看来,我的选择如下:

  1. 将整个文件包裹在var Object = { ... };中。问题是我必须改变声明变量和函数的语法。

  2. 在每个声明之前手动前缀Object.xxx。这也是很多手工工作,并且使事情略显冗长。

  3. 有更好的方法吗?或者如果没有,是否有理由更喜欢(1)或(2)?

3 个答案:

答案 0 :(得分:1)

我想你想要这样

var someObject = function (window, document, undefined) {
  /*you code...etc here*/
  return {
    method1 : your_method...,
    method2 : your_method...,
    method2 : your_method...,
    object : your_object...
  }
} (window, document);

这里传递窗口和文档的原因是使它成为局部变量而不是外部变量,以最小化查找变量的成本。 大多数js引擎现在可以自己处理,所以现在可能不是真的需要。以防这个代码可能在一个非常古老的浏览器上运行。

未定义传递方式也是由于兼容性原因,undefined是一些旧浏览器的覆盖变量。新的浏览器不允许这样的行动。

答案 1 :(得分:1)

您不是在寻找类或对象。看看你的描述,我想你想要一个像模块的东西。

您可以隐藏全局范围内的变量并“导出”相关位,如下所示:

var MyModule = (function(){

  // regular code here
  var hidden = 10,
      visible = 20;

  function doSomething() {
    return hidden + visible;
  }

  // the "export" part
  return {
    twenty: visible,
    doSomething: doSomething
  };

})(); 

// then:

MyModule.doSomething(); // => 30
MyModule.twenty + 1 // => 21
MyModule.hidden     // undefined - no such thing here 
// hidden, visible and doSomething without MyModule. are invisible here

这是在JS中模拟模块的一个例子。 (function(){...})()部分称为IIFE

答案 2 :(得分:1)

您可以遵循不同的JavaScript设计模式来完成此任务。

我建议查看这本在线图书: http://addyosmani.com/resources/essentialjsdesignpatterns/book/