JavaScript插件设置优化

时间:2013-10-30 19:20:21

标签: javascript jquery object plugins default

我已经完成了一个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个对象?

2 个答案:

答案 0 :(得分:1)

不确定是否完全理解,但为什么不在一次更改值后声明默认值:

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...
    };

答案 1 :(得分: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/