0

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

4

2 回答 2

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...
    };
于 2013-10-30T19:36:38.887 回答
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/

于 2013-10-30T22:08:36.127 回答