本次总结的故事背景
在一般的设计过程中,标签化语言很好,但标签话语言一般只能做一次数据集合的控制,或者说只能在初始化的时候进行一次数据集或者元素集合的处理
但是因为业务需求或者功能复杂度的提高需要操作的字段不断新增,无论是数据字段还是元素字段,控制各种字段的对象需要有更多的操作,对于放在一起的同一个方法多次调用(尽管操作的对象不一样,但总有一种强迫症的感觉想把重复的方法调用干掉)
针对故事待处理的想法
对于任何逻辑语言,主要的两类是被处理的数据对象,和处理方法;既然存在重复的方法调用,为什么我不简化成对于重复方法调用,我先可以把所有本次需要处理的数据提供给这个处理方法,然后自动将数据全部处理完
引申的内容
本次优化的js语言,涉及到js语法仅作简单说明
js中this传递和赋值
这是部分情况下需要使用的,具体参见https://blog.youkuaiyun.com/u013594477/article/details/78949817
其中的call如果设置被调用的操作域
待处理数据对象集合
总需要定义一个集合,这个集合至少是针对集合中的每一个key(可以理解为当前操作下的元素主键)的数据元素有一个打包是处理数据
单一元素的处理集合数据定义
基本数据结构--这个比较常见,普通的赋值和属性修改,都是简单数据结构
function Enode(keyid,kvalue){
this.key=keyid;
this.value=kvalue;
}
复杂数据
function Eitem(keyid){
this.key=keyid;
this.executData=new Array();
this.addExecutData=function(_keyid,_kvalue){
this.executData.push(new Enode(_keyid,_kvalue));
}
}
数据集合
function Emap(){
this.elements=new Array();
this.add=function(_keyid,_kvalue){
this.elements.push(new Enode(_keyid,_kvalue));
}
}
针对多个对象进行同样的数据修改操作,第一步是准备好待处理的元素和其准备修改的值
function EbatchData(datamap,sameValue,keys)
{
for(var idx in keys){
datamap.put(keys[idx],sameValue);
}
}
或者是不同赋值
function EbatchDataX(datamap,Enodes)
{
for(var idx in Enodes){
datamap.put(Enodes[idx].key,Enodes[idx].value);
}
}
然后对准备好的数据执行处理
新建批次雷同处理
function FunBatch(funcobj,datamap,controls,callback){
if(typeof funcobj ==="function"){
var datasets=datamap.elements;
for(var idx in datasets){
funcobj .call(this,datasets[idx].key,datasets[idx].value);//这一句是比较重要的一点,关于js下操作域问题,请详细查看this赋值
}
}
}
就这样,准备类似数据和批次执行统一方法已经准备好了
请参考以下优化
比如,你有5行类似的操作(item1.setvisible方法重复调用)
item1.setvisible("input1",true);
item1.setvisible("select1",true);
item1.setvisible("input2",true);
item1.setvisible("input3",true);
item1.setvisible("input4",true);
通过转换
var datas=EbatchData(new Emap(),true,["input1","select1","input2","input3","input4"]);//带操作数据准备
FunBatch.call(item1,item1.setvisible,datas);//批次处理数据
这样就达到基本的效果了
重复的事让可以重复的方法去执行,请不要行复制,不仅浪费代码行,还浪费阅读精力
而且这样可读性很好了,另外还有一些想法需要和大家分享
针对for循环,虽然实现了重复目的,有没有可以并行执行的循环
即现在有一堆处理方法和待处理数据,我想能否有一种语言原生支持数据处理的裂变并行到聚集结果