模拟jsonp
1 var id = 0; 2 function JSONP(url,param,cb){ 3 var callbackName = "json_" + id++; 4 var arg = Array.prototype.slice.call(arguments); 5 var _cb = arg.pop(); 6 window[callbackName] = function(data){ 7 head.removeChild(scriptNode); 8 window[callbackName] = null; 9 if(typeof _cb == "function"){ 10 _cb(data); 11 } 12 } 13 var _url = url.replace("callback=?","callback="+callbackName); 14 if(param){ 15 var arr = []; 16 for(i in param){ 17 arr.push(i+"="+arr[i]); 18 } 19 _url += "&"+arr.join("&"); 20 } 21 var head =document.getElementsByTagName("head")[0]; 22 var scriptNode = document.createElement("script"); 23 scriptNode.src = _url; 24 head.appendChild(scriptNode); 25 26 }
事件绑定/发布
1 function EventMachine(){ 2 var _o = {}; 3 this.bind = function(e,cb){ 4 if(!_o[e]){ 5 _o[e] = []; 6 } 7 _o[e].push(cb); 8 } 9 this.trigger = function(e,param){ 10 if(arguments.length==2&&Object.prototype.toString.call(param) == "[object Array]"){ 11 var arg = param; 12 }else{ 13 var arg = Array.prototype.slice.call(arguments,1); 14 } 15 if(_o[e]&&_o[e].length>0){ 16 for(var i=0,l=_o[e].length;i<l;i++){ 17 _o[e][i].apply(this,arg); 18 } 19 } 20 } 21 }