Разрешите задать свой вопрос, тоже касательно цивилизованных методов. Как сделать чтобы рулезы не размножались с каждым объектом, а существовали как общий для всех объектов метод, то есть прототипом?
О чем я выше писал, сейчас сделано вот так:
var FormField=function(el){
var type= el.type,
value= el.value.trim(),
pat= el.getAttribute('pattern'),
req= el.getAttribute('required'),
err= el.getAttribute('errmsg')+"\n"+el.getAttribute('placeholder'),
rules={
'text':function(){
var len=value.length;
if(req && len<req)
throw 'Минимальное количество знаков: '+req;
else if(len && pat && !new RegExp(pat).test(value))
throw err;
},
'select-one':function(){
if(el.selectedIndex<0 && req)
throw 'Необходимо выбрать из списка';
},
'select-multiple':function(){
var mul=el.getAttribute('multiple'),
for(var count=0, i=0; i<el.length; i++)
if(el[i].selected)
count++;
if(req && count<req)
throw 'Необходимо выбрать не меньше чем '+req;
else if(mul && count>mul)
throw 'Можно выбрать не больше чем '+mul;
}
};
return {
el:el,
error:null,
title:el.title,
validate:function() {
if(type in rules)
rules[type]();
else
rules.text();
}
};
};
В блоке инициализации каждому полю сопоставляется этот объект и все объекты сохраняются в объект-массив по именам полей.
Как я понимаю приватный объект rules размножается, то есть копируется, а хотелось бы понять как его вынести в прототип. Спасибо.