具有私有/公共方法的高效Javascript模块模式

Efficient Javascript Module pattern with private/public methods

本文关键字:高效 Javascript 模式 模块 方法      更新时间:2023-09-26

我正在探索在编写Javascript模块时考虑性能的方法。

//我的libvar MyModule=函数(回调({var计数=0;main((//在我看来很难看//函数我想公开。函数main(({计数++;window.specialApi.doWorkAndCallback(秘密(;//…}//我想保密的功能//它需要访问计数器变量(#closure(函数secret(({如果(计数===2({callback((;}}//私人功能//其他私人功能//…};//以后任何其他人都可以使用MyModule。MyModule(function(({console.log("ok"(;}(;

我在这里发现的问题是,每次调用MyModule((时,JS VM都会重新解释整个函数列表,这对性能不利。

有没有一种模式可以让我做以下事情:

  • 显示main函数
  • 请将机密功能保密。请注意可能强化任务的计数器变量
  • 只分析一次MyModule

感谢

以下函数创建并返回一个对象,该对象仅包含main方法:

var MyModule = function(callback){
    var count = 0;
    var secret = function(){
        if(count === 2){
            callback();
        } 
    }
    var main = function(){
        count ++;
        window.specialApi.doWorkAndCallback(secret);
    }
    main();
    return {
        main: main
    };
};

然后,你唯一要做的就是调用这个函数一次,并将它的返回值存储在一个变量上:

var module = MyModule(function(){console.log('ok');});

最后,每当您想调用main(并保留count的旧值(时,只需执行:

module.main();
  //My lib
    var modul =  
        {
        count:0,
        callback:{},
        main: function(){
           this.count ++;                        
            window.specialApi.doWorkAndCallback(this.secret);     
        },
        secret: function(){
            if(this.count === 2){
              this.callback();
            } 
        }
    };

    modul.callback = function(){console.log("ok");};
    modul.main();
    modul.callback = function(){console.log("ok");};
    modul.main();
    modul.callback = function(){console.log("ok");};
    modul.main();
    modul.callback = function(){console.log("ok");};
    modul.main();

http://jsbin.com/emitoj/3/edit