JS扩展类,克隆对象与混合类实例分析
本文实例讲述了JS扩展类,克隆对象与混合类。分享给大家供大家参考,具体如下:
1.类扩展
/*EditInPlaceField类*/ /*扩展函数*/ functionextend(subClass,superClass){ varF=function(){}; F.prototype=superClass.prototype; subClass.prototype=newF(); subClass.prototype.constructor=subClass; subClass.superclass=superClass.prototype; if(superClass.prototype.constructor==Object.prototype.constructor){ superClass.prototype.constructor=superClass; } } functionEditInPlaceField(id,parent,value){//构造函数 this.id=id; this.value=value||'defaultvalue'; this.parentElement=parent; this.createElements(this.id); this.attachEvents(); }; EditInPlaceField.prototype={ createElements:function(id){ this.containerElement=document.createElement('div'); this.parentElement.appendChild(this.containerElement); this.staticElement=document.createElement('span'); this.containerElement.appendChild(this.staticElement); this.staticElement.innerHTML=this.value; this.fieldElement=document.createElement('input'); this.fieldElement.type='text'; this.fieldElement.value=this.value; this.containerElement.appendChild(this.fieldElement); this.saveButton=document.createElement('input'); this.saveButton.type='button'; this.saveButton.value='Save'; this.containerElement.appendChild(this.saveButton); this.cancelButton=document.createElement('input'); this.cancelButton.type='button'; this.cancelButton.value='Cancel'; this.containerElement.appendChild(this.cancelButton); this.convertToText(); }, attachEvents:function(){ varthat=this; addEvent(this.staticElement,'click',function(){that.convertToEditable();}); addEvent(this.saveButton,'click',function(){that.save();}); addEvent(this.cancelButton,'click',function(){that.cancel();}); }, convertToEditable:function(){ this.staticElement.style.display='none'; this.fieldElement.style.display='inline'; this.saveButton.style.display='inline'; this.cancelButton.style.display='inline'; this.setValue(this.value); }, save:function(){ this.value=this.getValue(); varthat=this; varcallback={ success:function(){that.convertToText();}, failure:function(){alert('Errorsavingvalue.');} }; ajaxRequest('GET','save.php?id='+this.id+'&value='+this.value,callback); }, cancel:function(){ this.convertToText(); }, convertToText:function(){ this.fieldElement.style.display='none'; this.saveButton.style.display='none'; this.cancelButton.style.display='none'; this.staticElement.style.display='inline'; this.setValue(this.value); }, setValue:function(value){ this.fieldElement.value=value; this.staticElement.innerHTML=value; }, getValue:function(){ returnthis.fieldElement.value; } }; vartitleClassical=newEditInPlaceField('titleClassical',$('doc'),'TitleHere'); varcurrentTitleText=titleClassical.getValue(); /*EditInPlaceArea类*/ functionEditInPlaceArea(id,parent,value){ EditInPlaceArea.superclass.constructor.call(this,id,parent,value); }; extend(EditInPlaceArea,EditInPlaceField); //Overridecertainmethods. EditInPlaceArea.prototype.createElements=function(id){ this.containerElement=document.createElement('div'); this.parentElement.appendChild(this.containerElement); this.staticElement=document.createElement('p'); this.containerElement.appendChild(this.staticElement); this.staticElement.innerHTML=this.value; this.fieldElement=document.createElement('textarea'); this.fieldElement.value=this.value; this.containerElement.appendChild(this.fieldElement); this.saveButton=document.createElement('input'); this.saveButton.type='button'; this.saveButton.value='Save'; this.containerElement.appendChild(this.saveButton); this.cancelButton=document.createElement('input'); this.cancelButton.type='button'; this.cancelButton.value='Cancel'; this.containerElement.appendChild(this.cancelButton); this.convertToText(); }; EditInPlaceArea.prototype.convertToEditable=function(){ this.staticElement.style.display='none'; this.fieldElement.style.display='block'; this.saveButton.style.display='inline'; this.cancelButton.style.display='inline'; this.setValue(this.value); }; EditInPlaceArea.prototype.convertToText=function(){ this.fieldElement.style.display='none'; this.saveButton.style.display='none'; this.cancelButton.style.display='none'; this.staticElement.style.display='block'; this.setValue(this.value); };
2.对象克隆
/*EditInPlaceField对象*/ /*克隆函数*/ functionclone(object){ functionF(){} F.prototype=object; returnnewF; } varEditInPlaceField={ configure:function(id,parent,value){ this.id=id; this.value=value||'defaultvalue'; this.parentElement=parent; this.createElements(this.id); this.attachEvents(); }, createElements:function(id){ this.containerElement=document.createElement('div'); this.parentElement.appendChild(this.containerElement); this.staticElement=document.createElement('span'); this.containerElement.appendChild(this.staticElement); this.staticElement.innerHTML=this.value; this.fieldElement=document.createElement('input'); this.fieldElement.type='text'; this.fieldElement.value=this.value; this.containerElement.appendChild(this.fieldElement); this.saveButton=document.createElement('input'); this.saveButton.type='button'; this.saveButton.value='Save'; this.containerElement.appendChild(this.saveButton); this.cancelButton=document.createElement('input'); this.cancelButton.type='button'; this.cancelButton.value='Cancel'; this.containerElement.appendChild(this.cancelButton); this.convertToText(); }, attachEvents:function(){ varthat=this; addEvent(this.staticElement,'click',function(){that.convertToEditable();}); addEvent(this.saveButton,'click',function(){that.save();}); addEvent(this.cancelButton,'click',function(){that.cancel();}); }, convertToEditable:function(){ this.staticElement.style.display='none'; this.fieldElement.style.display='inline'; this.saveButton.style.display='inline'; this.cancelButton.style.display='inline'; this.setValue(this.value); }, save:function(){ this.value=this.getValue(); varthat=this; varcallback={ success:function(){that.convertToText();}, failure:function(){alert('Errorsavingvalue.');} }; ajaxRequest('GET','save.php?id='+this.id+'&value='+this.value,callback); }, cancel:function(){ this.convertToText(); }, convertToText:function(){ this.fieldElement.style.display='none'; this.saveButton.style.display='none'; this.cancelButton.style.display='none'; this.staticElement.style.display='inline'; this.setValue(this.value); }, setValue:function(value){ this.fieldElement.value=value; this.staticElement.innerHTML=value; }, getValue:function(){ returnthis.fieldElement.value; } }; vartitlePrototypal=clone(EditInPlaceField); titlePrototypal.configure('titlePrototypal',$('doc'),'TitleHere'); varcurrentTitleText=titlePrototypal.getValue(); /*EditInPlaceArea对象*/ varEditInPlaceArea=clone(EditInPlaceField); //Overridecertainmethods. EditInPlaceArea.createElements=function(id){ this.containerElement=document.createElement('div'); this.parentElement.appendChild(this.containerElement); this.staticElement=document.createElement('p'); this.containerElement.appendChild(this.staticElement); this.staticElement.innerHTML=this.value; this.fieldElement=document.createElement('textarea'); this.fieldElement.value=this.value; this.containerElement.appendChild(this.fieldElement); this.saveButton=document.createElement('input'); this.saveButton.type='button'; this.saveButton.value='Save'; this.containerElement.appendChild(this.saveButton); this.cancelButton=document.createElement('input'); this.cancelButton.type='button'; this.cancelButton.value='Cancel'; this.containerElement.appendChild(this.cancelButton); this.convertToText(); }; EditInPlaceArea.convertToEditable=function(){ this.staticElement.style.display='none'; this.fieldElement.style.display='block'; this.saveButton.style.display='inline'; this.cancelButton.style.display='inline'; this.setValue(this.value); }; EditInPlaceArea.convertToText=function(){ this.fieldElement.style.display='none'; this.saveButton.style.display='none'; this.cancelButton.style.display='none'; this.staticElement.style.display='block'; this.setValue(this.value); };
3.混合类
/*混合类*/ /*混合函数*/ functionaugment(receivingClass,givingClass){ for(methodNameingivingClass.prototype){ if(!receivingClass.prototype[methodName]){ receivingClass.prototype[methodName]=givingClass.prototype[methodName]; } } } /*改进的增加函数*/ functionaugment(receivingClass,givingClass){ if(arguments[2]){//Onlygivecertainmethods. for(vari=2,len=arguments.length;i<len;i++){ receivingClass.prototype[arguments[i]]=givingClass.prototype[arguments[i]]; } } else{//Giveallmethods. for(methodNameingivingClass.prototype){ if(!receivingClass.prototype[methodName]){ receivingClass.prototype[methodName]=givingClass.prototype[methodName]; } } } } varEditInPlaceMixin=function(){}; EditInPlaceMixin.prototype={ createElements:function(id){ this.containerElement=document.createElement('div'); this.parentElement.appendChild(this.containerElement); this.staticElement=document.createElement('span'); this.containerElement.appendChild(this.staticElement); this.staticElement.innerHTML=this.value; this.fieldElement=document.createElement('input'); this.fieldElement.type='text'; this.fieldElement.value=this.value; this.containerElement.appendChild(this.fieldElement); this.saveButton=document.createElement('input'); this.saveButton.type='button'; this.saveButton.value='Save'; this.containerElement.appendChild(this.saveButton); this.cancelButton=document.createElement('input'); this.cancelButton.type='button'; this.cancelButton.value='Cancel'; this.containerElement.appendChild(this.cancelButton); this.convertToText(); }, attachEvents:function(){ varthat=this; addEvent(this.staticElement,'click',function(){that.convertToEditable();}); addEvent(this.saveButton,'click',function(){that.save();}); addEvent(this.cancelButton,'click',function(){that.cancel();}); }, convertToEditable:function(){ this.staticElement.style.display='none'; this.fieldElement.style.display='inline'; this.saveButton.style.display='inline'; this.cancelButton.style.display='inline'; this.setValue(this.value); }, save:function(){ this.value=this.getValue(); varthat=this; varcallback={ success:function(){that.convertToText();}, failure:function(){alert('Errorsavingvalue.');} }; ajaxRequest('GET','save.php?id='+this.id+'&value='+this.value,callback); }, cancel:function(){ this.convertToText(); }, convertToText:function(){ this.fieldElement.style.display='none'; this.saveButton.style.display='none'; this.cancelButton.style.display='none'; this.staticElement.style.display='inline'; this.setValue(this.value); }, setValue:function(value){ this.fieldElement.value=value; this.staticElement.innerHTML=value; }, getValue:function(){ returnthis.fieldElement.value; } }; /*EditInPlaceFieldclass.*/ functionEditInPlaceField(id,parent,value){ this.id=id; this.value=value||'defaultvalue'; this.parentElement=parent; this.createElements(this.id); this.attachEvents(); }; augment(EditInPlaceField,EditInPlaceMixin); /*EditInPlaceAreaclass.*/ functionEditInPlaceArea(id,parent,value){ this.id=id; this.value=value||'defaultvalue'; this.parentElement=parent; this.createElements(this.id); this.attachEvents(); }; //Addcertainmethodssothataugmentwon'tincludethem. EditInPlaceArea.prototype.createElements=function(id){ this.containerElement=document.createElement('div'); this.parentElement.appendChild(this.containerElement); this.staticElement=document.createElement('p'); this.containerElement.appendChild(this.staticElement); this.staticElement.innerHTML=this.value; this.fieldElement=document.createElement('textarea'); this.fieldElement.value=this.value; this.containerElement.appendChild(this.fieldElement); this.saveButton=document.createElement('input'); this.saveButton.type='button'; this.saveButton.value='Save'; this.containerElement.appendChild(this.saveButton); this.cancelButton=document.createElement('input'); this.cancelButton.type='button'; this.cancelButton.value='Cancel'; this.containerElement.appendChild(this.cancelButton); this.convertToText(); }; EditInPlaceArea.prototype.convertToEditable=function(){ this.staticElement.style.display='none'; this.fieldElement.style.display='block'; this.saveButton.style.display='inline'; this.cancelButton.style.display='inline'; this.setValue(this.value); }; EditInPlaceArea.prototype.convertToText=function(){ this.fieldElement.style.display='none'; this.saveButton.style.display='none'; this.cancelButton.style.display='none'; this.staticElement.style.display='block'; this.setValue(this.value); }; augment(EditInPlaceArea,EditInPlaceMixin);
点评:
js分为类和对象、函数。
其中又包含多种形式,属性,数组属性,函数,私有函数,公有函数,静态函数。
小的基础方法,可以有大的用途,比如extend方法,clone方法,还有augment方法。
更多关于JavaScript相关内容可查看本站专题:《JavaScript常用函数技巧汇总》、《javascript面向对象入门教程》、《JavaScript中json操作技巧总结》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript动画特效与技巧汇总》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。