[英]Efficient Javascript Module pattern with private/public methods
我正在探索在考慮性能的情況下編寫Javascript模塊的方法。
//My lib var MyModule = function(callback){ var count = 0; main(); //ugly in my opinion //Function I want to be public. function main(){ count ++; window.specialApi.doWorkAndCallback(secret); //… } //Function I want to keep private //It needs to access to counter variable (#closure) function secret(){ if(count === 2){ callback(); } } //private function //other private function //… }; //Later anyone else can use MyModule. MyModule(function(){console.log("ok");});
我在這里發現的問題是,每次調用MyModule()時,JS VM都會重新解釋整個函數列表,這不利於性能。
有沒有一種模式可以讓我執行以下操作:
謝謝
以下函數創建並返回一個對象,該對象僅包含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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.