从编程框架看系统
补全现有js语言不足之处。任何语言都有不足之处,C语言是基础语言,为了方便使用,快速开发,以降低系统速度的代价,编写了一系列的可供调用的api。于是有了诸如C++,Java,PHP等其他语言,这些语言无一例外,均为C语言编写。每种语言还出了很多框架,让编程更加便捷,但付出的代价是:系统速度的降低。UForm框架是在编写云操作系统时,对不断形成的api进行的整理工作。为了照顾速度,ufrom采用了原生javascript加上选择器的方法。选择器会拖慢速度,但如果利用得好,可以减轻开发负担。
uform框架补全的内容如下:
1、UForm框架主要扩展了String,Number,Array,Object,Guid,json,Date等七种数据类型的方法,还有一些html5的数据类型,但暂未使用,整理框架时需列出以上数据类型的补全方法。
1)、 值类型的补全。Number
2)、 字符类型补全。String
3)、 数组类型补全。Array
4)、 Object类型补全。未使用,Object为js的基础类,补全消耗资源太多。
5)、 Guid类型补全
6)、 json数据类型补全
7)、 Date类型补全
2、UForm有丰富的正则表达式
3、UForm框架有自己的选择器,类似jquery,为了对元素进行更良好的操作,如动画,选择元素,制作了选择器
4、全兼容ie6以上浏览器,Chrome浏览器,Safari浏览器,Firefox
5、键盘事件,要求支持复合键
6、鼠标事件
7、$选择器
8、对常用的方法进行封装,形成了一系列可供调用的api,例如:U.UF.M.Addobj(obj.attr),给对象添加属性的方法
......
基于以上描述,特安排如下工作:
1、多份实例的写法
对应示例在U.UI.js文件中
功能:弹出提示框,为了同时弹出多个提示框,为多份实例对象
1、可以像java语言的用法,用new调用多份,例如:var a=new U.AlertB();
2、也可以省略new的步骤,直接U.Alert(),出来的结果为多份。
参数一:
参数二:
返回值:
示例:
结果:
U.Alert = function (UTH, UTI) {
if (this !== window) { new U.AlertB(UTH, UTI); }
else { U.AlertB.call(this); }
}
为了多份实例,另外建立一个类似类的函数。
this.TI = ((UTI == null || UTI < 0) ? 1000 : UTI);
this.UDOD = $($$("div", {
"innerHTML": UTH,
"className": "USalert",
"style": { "cssText": "z-index:9999;left:" + (US.Width / 2 - 160) + "px;top:" + (US.Height / 2 - 100) + "px" },
"onclick": U.UF.M.apply(this, [[this.DAlert, [true]]] }, $("body")[0]).animate({ "top": US.Height / 2 - 80 + "px" }, 300, U.UF.M.apply(this, this.AsynAmAlert));
}));
为了减少内存消耗,把方法写在原型中。
//init: function (UTH, UTI) { //创建alert "id": "USalert",
U.AlertB.prototype =
{
//this.TI = ((UTI == null || UTI < 0 ) ? 1000 : UTI);
//this.UDOD = $($$("div", {
// "innerHTML": UTH,
// "className": "USalert",
// "style": { "cssText": "z-index:9999;left:" + (US.Width / 2 - 160) + "px;top:" + (US.Height / 2 - 100) + "px" },
// "onclick": U.UF.M.apply(this, [[this.DAlert, [true]]] }, $("body")[0]).animate({ "top": US.Height / 2 - 80 + "px" }, 300, U.UF.M.apply(this, this.AsynAmAlert));
//},
AsynAmAlert: function () {//等待动画
this.UTI = setTimeout(U.UF.M.apply(this, this.AmAlert), this.TI || 1000); //异步等待
},
AmAlert: function () {//结束动画
(this.UTI) && (clearTimeout(this.UTI)); var _UDOD = $(this.UDOD);
(UDOD.Parent() == document.body) && (_UDOD.animate({ "top": US.Height / 2 - 70 + "px" }, 100, U.UF.M.apply\(this, this.DAlert)));
},
DAlert: function (UTF) { //移除alert
if (this.TI || UTF) { $(this.UDOD).remove(); }
}
2、()()闭包立即执行的写法,改成正规的命名空间。
every: (function () {//判断是否大于制定的数字
if (!Array.prototype.every) { //是否存在
return function (UCB, UTI) { return this.forEach(UCB, UTI, "every"); }
}
else { return Array.prototype.every; }
})()
修改为:
every: Array.prototype.every ? Array.prototype.every : function (UCB, UTI) {
return this.forEach(UCB, UTI, "every");
}
3、对消耗资源的类似jquery的写法,予以重新编码。让程序跑的更快,写法更加通熟易懂。对消耗资源不大或者不经常使用的jquery写法,予以保留,并编写api文档。
例如:
优化$("#aaa")的执行速度。
优化$(.aaa")的执行速度。速度太慢,尽量少用。
优化$("div")的执行速度。
系统运行流程是看懂一套系统的根基,是提纲挈领的关键所在。