个人写的一个javascript 框架

   前几天公司要写一个calendar 的程序,因为要求ajax提交的时候,这个js的大小要很小(不能超过3K),而且要处理ajax的并发性问题,这样我就必须要写一个自己的ajax程序。刚好这个任务下来是周五,我就利用周末的时间写了一个简单的javascrpit的框架,包括以下的内容:
1. 内核,处理类,类的继承,一些简单的常用的函数。
2. Ajax处理,处理了并发提交时候的互相替换问题。
3. Event处理,简单的事件监听函数。
4. Calendar 一个简单的日历,允许在日历上添加事件。
5. Json 数据的json的处理。
等我有空,我会整理一个文档出来。现在我只是把源代码发布出来,有任何建议,请给我来信niwzw@163.com
NanJia 是我公司的名字,在这里仅仅是做为命名空间,以防止和其他的类库冲突。

源代码下载
ajax部分我给它提取成了一个独立的文件,下面的它的代码,它的核心是用了一个对象池技术。
NanJia = {};
NanJia.ObjPool 
= function() 
{
    
this.Pool = [];
    
this.Args = [];
}
NanJia$ObjPool 
= NanJia.ObjPool.prototype;
NanJia$ObjPool.GetInstance 
= function (createH, compareH, args) 
{
    
for (var i = 0; i < this.Pool.length; i++
    {
        
if (this.Compare(this.Pool[i], compareH)) 
        {
            
this.Args[i] = args;
            
return this.Pool[i];
        }
    }
    
var argu = Array.prototype.slice.call(arguments, 3);
    
this.Pool[this.Pool.length] = createH.apply(this, argu);
    
this.Args[this.Pool.length-1= args;
    
return this.Pool[this.Pool.length - 1];
}
NanJia$ObjPool.Compare 
= function(obj, handle) 
{
    
return handle.call(this, obj);
}
NanJia$ObjPool.GetInfo 
= function(obj) 
{
    
for (var i = 0; i < this.Pool.length; i++
    {
        
if (this.Pool[i] === obj)
        {
            
break;
        }
    }
    
if (i == this.Pool.length)
    {
        
return [];
    } 
    
else 
    {
        
return this.Args[i];
    }
}
NanJia.XMLHttp 
= function(){
    
this.Response = null;
}
NanJia.XMLHttp.ObjPool 
= new NanJia.ObjPool();
NanJia$XMLHttp 
= NanJia.XMLHttp.prototype;
NanJia.XMLHttp.Create 
= function()
{
    
if (window.ActiveXObject)
    {
        
var MSXML = ['MSXML2.XMLHTTP.6.0''MSXML2.XMLHTTP.5.0''MSXML2.XMLHTTP.4.0''MSXML2.XMLHTTP.3.0''MSXML2.XMLHTTP''Microsoft.XMLHTTP'];
        
var e;
        
for(var n = 0; n < MSXML.length; n ++)
        {
            
try {
                
var objXMLHttp = new ActiveXObject(MSXML[n]);
                
break;
            } 
            
catch(e)
            {
                
//NanJia.Alert(e);
            }
        }
    } 
else {
        
var objXMLHttp = new XMLHttpRequest();
    }
    
return objXMLHttp;
}
NanJia$XMLHttp.Request 
= function (url, data, method, callBack)
{
    
var argu = Array.prototype.slice.call(arguments, 4);
    
var objXMLHttp = NanJia.XMLHttp.ObjPool.GetInstance(NanJia.XMLHttp.Create, NanJia.XMLHttp.Compare, argu);
    
var e;
    
try {
        
if (url.indexOf("?"> 0){
            url 
+= "&randnum=" + Math.random();
        } 
else {
            url 
+= "?randnum=" + Math.random();
        }
        objXMLHttp.onreadystatechange 
= function () {
            callBack.call(
this, objXMLHttp);
        }
        objXMLHttp.open(method, url, 
true);
        objXMLHttp.setRequestHeader(
'Content-Type''application/x-www-form-urlencoded;charset=UTF-8');
        objXMLHttp.send(data);
    } 
catch(e) {
        NanJia.Alert(e);
    }
}
NanJia.XMLHttp.Compare 
= function(objXMLHttp) 
{
    
return (objXMLHttp.readyState == 4|| (objXMLHttp.readyState == 0);
}
NanJia$XMLHttp.Update 
= function(url, id, method, param) 
{
      
if (method == null || method == 'undefind'
      {
          method 
= "post";
      }
      
this.Request(url, param, method, this.DivUpdate, id);
}
NanJia$XMLHttp.DivUpdate 
= function (obj, id) 
{
    
if (objXMLHttp.readyState == 4)
    {
        NanJia.$(id).innerHTML 
= this.EvalScripts(obj.responseText);
    }
}
NanJia.$ 
= function(id) 
{
    
return document.getElementById(id);
}
NanJia.$S 
= function(id) 
{
    
return NanJia.$(id).options[NanJia.$(id).selectedIndex].value;
}
NanJia.EvalScripts 
= function(str) 
{
    
var ScriptFragment = '<script[^>]*>([\\S\\s]*?)<\/script>';
    
var matchAll = new RegExp(ScriptFragment, 'img');
    
var matchOne = new RegExp(ScriptFragment, 'im');
    
var str1 = str.match(matchAll);
    
var re = "", i, v;
    
if (str1 == null) {
        
return (str);
    }
    
for (i = 0; i < str1.length; i++) {
        v 
= str1[i];
        re 
+= v.match(matchOne)[1]+"\n";
    }
    eval(re);
    
return str.replace(matchAll, '');
}
NanJia$XMLHttp.toParam 
= function(arr) {
    str 
= "";
    
for (key in arr)
    {
        
if (typeof arr[key] == "string" || typeof arr[key] == "number")
        {
            str 
+= "&"+key+"="+arr[key];
        }
    }
    str 
= str.replace(/^&/'');
    
return str;
}
$String 
= String.prototype;
$String.trim 
= function() {
    
return this.replace(/^\s+|\s+$/g, '');
}
原文地址:https://www.cnblogs.com/niniwzw/p/1211806.html