|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- /**对比两个列表项是否相同
- * @param {Array} a1 要进行比较的数组
- * @param {Array} a2 要进行比较的数组
- * @return {Boolean} 返回是否相同
- */
- function arrayEqual(a1,a2){
- if(a1.length!=a2.length)return false;
- var i=a1.length;
- for(--i;i>=0;--i){
- if(a1[i]!=a2[i])return false;
- }
- return true;
- }
- /**
- * 创建重载函数
- * @param {Function} defaultFnc 当没有和实参对应的重载时默认执行的函数
- * @return {Function} 函数
- * 用 .addOverload 添加重载
- */
- function createOlFnc(defaultFnc){
- var rtn=function(){
- var i=arguments.length-1;
- var parameterType=[];
- for(;i>=0;--i){
- parameterType.push(arguments[i].constructor);
- }
- for(i=rtn.ols.length-1;i>=0;--i){
- if(arrayEqual(parameterType,rtn.ols[i].parameterType)){
- return rtn.ols[i].fnc.apply(this,arguments);
- }
- }
- rtn.defaultFnc.apply(this,arguments);
- }
- rtn.ols=[];
- rtn.defaultFnc=defaultFnc;
- /**
- * 添加一个重载
- * @param {Array} parameterType 形参的类型
- * @param {Function} fnc 执行的函数
- */
- rtn.addOverload=function(parameterType,fnc){
- this.ols.push({parameterType:parameterType,fnc:fnc});
- }
- return rtn;
- }
复制代码
使用列
- var d=createOlFnc(function(){console.log(123);});
- d.addOverload([String],function(str){console.log("this is a string: "+str);});
- d();//123
- d("abcabcabc");//this is a string: abcabcabc
复制代码 |
|