2013-10-30 108 views
0

我已經完成了JavaScript插件,現在專注於優化,但遇到了文件大小問題。我已經完成了所有操作(變量名稱,引用等),並優化了我的所有方法。JavaScript插件設置優化

重量全部在用戶設置中。這個插件僅適用於大量用戶通過設置進行自定義...因此包括許多設置。另外,「皮膚」是可用的並且只是的默認設置變化對象,像這樣:

//SETUP MAIN PLUGIN DEFAULTS OBJECT 
var default:{ 'setting1' : value1, 'setting2' : value2 }, 

// INIT METHOD 
init:function(options){ 
    var defaults=Plugin.defaults; 
     //SETUP SKINS SETTINGS OBJECTS 
    switch(options.skin){ 
      case 2: 
       var defaults={ 'setting1' : value1, 'setting2' : value2}; 
      break; 
      //ETC... 
     }; 
Boxaroo.settings=$.extend({},defaults,options||{}); 
} 

基本上,用戶可以在皮膚數通過作爲第一設置 - 它加載特定的一組插件默認的 - 它們可以在其皮膚號碼設置後被傳入的其他設置覆蓋。

一切都很完美,但這意味着我需要重複每個案例/皮膚的用戶設置名稱...由於有6個皮膚,'setting1'將重複6次(儘管值可能不同)。我很好奇,是否有任何方法可以壓縮宣佈這6個對象?

回答

1

不知道要充分理解,但你爲什麼不聲明默認一次變化值AFER這樣的:

var defaults=Plugin.defaults; 
switch(options.skin){ 
     case 2: 
      defaults.setting1 = value1; 
      ... 
     break; 
     //ETC... 
    }; 

或者使用jQuery再次擴展:

var defaults=Plugin.defaults; 
switch(options.skin){ 
     case 2: 
      $.extend(defaults, {setting1 : value1, ...}; 
     break; 
     //ETC... 
    }; 
+0

這樣的作品,並似乎是一個更好的方法,但是有很多的設置時,這個答案將真正使文本相當長的時間,因爲現在不得不重複'違約'。爲每一個設置。 – Aaron

+0

@Aaron對於第一種情況,這是正確的,但對於'extend',你只能重複一次,而不必寫出所有設置。 –

+0

謝謝! :)我看到了(它肯定是對目前代碼的一種改進,因爲它沒有聲明另一個對象變量,它仍然讓我不得不重複所有的原始問題。你的第一個例子給了我一個主意使用類似defaults [a] = value1的東西;以及設置變量名稱(a,b,c,d等)。我仍然需要重複一切,但設置名稱會縮短爲1個字母並減少有點重量 – Aaron

0

您可以使用對象構造

function Skin(data) {//use array to keep code short 
    this.setting1 = data[0]; 
    this.setting2 = data[1]; 
};  
//SETUP MAIN PLUGIN DEFAULTS OBJECT 
var default:new Skin([value1,value2]),//if skin object is equal to default 

// INIT METHOD 
init:function(options){ 
var defaults=Plugin.defaults; 
    //SETUP SKINS SETTINGS OBJECTS 
switch(options.skin){ 
     case 2: 
      var defaults=new Skin([value1,value2]); 
     break; 
     //ETC... 
    }; 
Boxaroo.settings=$.extend({},defaults,options||{}); 
}  

或者您可以使用皮膚數組來刪除開關盒,噸需要做任何事情,當你改變皮膚

function Skin(data) { 
    this.setting1 = data[0]; 
    this.setting2 = data[1]; 
}; 
//SETUP MAIN PLUGIN DEFAULTS OBJECT 
var default:new Skin([value1,value2]), 
var skins:[ 
     new Skin(["setting1 skin1","setting2 skin1"]), 
     new Skin(["setting1 skin2","setting2 skin2"]), 
     new Skin(["setting1 skin3","setting2 skin3"]) 
     ], 
// INIT METHOD 
init:function(options){ 
    var defaults=Plugin.defaults; 
    //SETUP SKINS SETTINGS OBJECTS 
    var defaults=skins[options.skin]; 
Boxaroo.settings=$.extend({},defaults,options||{}); 
}  

http://jsfiddle.net/7ffg5/