javascript中只会执行一次(约定)的类?

时间:2015-05-12 17:05:20

标签: javascript function class modularity module-pattern

所以我有一个带有类

的javascript文件
var Loader = function(){

    // loader specific code (scoped)

}

我将在我的其他js文件中实现此类

(function()
{

var loaderInstance = new Loader();
// loaderInstance.callApiMethods();

})();

所以基本上这个Loader类只会在Web应用程序的整个生命周期中实例化一次。

问题:

  1. 这个Loader真的必须是一个类
  2. 任何更好的做法。

2 个答案:

答案 0 :(得分:0)

如果您确定永远不需要另一个加载器,则可以将其创建为文字对象(直接创建实例),并像其他任何加载器一样导出它。

var loader = {
    callApiMethods: function(){
        //etc.
    }
}
exports = loader;

您还可以使用以编程方式创建对象并将其返回的函数,并且可以通过在运行时传递所需的任何参数将其用作构造函数。

function loader(x, y, z){
    var obj = {}
    obj.name = x;
    obj.callApiMethods = function(){
        //do something with `y` or `z` etc
    }
    return obj;
}
module.exports = loader;

然后您可以使用第二个选项:

var createLoader = require('./filename.js');
//..and then when you need the loader object:
var loaderInstance = createLoader(a,b,c) 
// where a,b,c are any runtime arguments you might need

从内存管理的角度来看,这些选项在理论上都更好。

但课程很漂亮!

答案 1 :(得分:0)

1)装载机不需要在一个班级,除非你想要一些范围关闭的好处:

在类中声明loaderInstance,使其本地作用于该类...否则它将是全局范围的,并且可能会干扰其他脚本

2)还有其他选择,但这是最简单的方法。基本上,javascript中的类总是一个可以直接实例化的对象,或者将它分配给带有函数等的变量/返回,并在代码中稍后实例化。

其他一些解决方案可能是像backbonejs这样的框架,它会强制你拥有一个mvc结构 http://backbonejs.org/