我已经完成了一个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个对象?
答案 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||{});
}