添加JavaScript重载函数的辅助方法2_javascript技巧

代码依然简单。所以依然没什么好解释的。。

复制代码 代码如下:

/** KOverLoad
一个创建重载函数的辅助方法。
补充上次的函数。
@Author ake 2010-07-03
@weblog http://www.cnblogs.com/akecn
*/
var KOverLoad = function(scope) {
this.scope = scope || window; //默认添加方法到这个对象中。同时添加的方法的this指向该对象。
this.list = {}; //存放重载函数的地方。
return this;
};
KOverLoad.prototype = {
//添加一个重载的方法。
//@param arg<Function> 重载的方法。
add:function(arg, types) {
if(typeof arg == "function") {
var types = (types || []).join(",");
this.list[arg.length + types] = arg; //以参数数量和类型做标识存储重载方法。很显然如果你的重载方法参数数量
return this;
}
},
checkTypes: function(types) {
var type = [];
//console.log(typeof type); []方式创建的数组,其typeof类型为object
//如果需要判断类型的话 还是用Object.prototype.toString.call(type) == "[object Array]"来判断吧。
for(var i=0, it; it = types[i++];) {
type.push(typeof it);
}
return type.join(",");
},
//添加完所有的重载函数以后,调用该方法来创建重载函数。
//@param fc<String> 重载函数的方法名。
load:function(fc) {
var self = this, args, len, types;
this.scope[fc] = function() { //将指定作用域的指定方法 设为重载函数。
args = Array.prototype.slice.call(arguments); //将参数转换为数组。
len = args.length;
types = self.checkTypes(args);
//console.log(self.list);
if(self.list[len + types]) { //根据参数数量调用符合的重载方法。
self.list[len + types].apply(self.scope, args); //这里指定了作用域和参数。
}else if(self.list[len]){
self.list[len].apply(self.scope, args)
}else {
throw new Error("undefined overload type");
}
}
}
};

下面是示例:

复制代码 代码如下:

var s = {};
new KOverLoad(s) //设置方法绑定的位置。命名空间?
.add(function(a) {
console.log("one",a,this)
},["string"])
.add(function(a,b) {
console.log("two",a,b,this)
},["string","string"])
.add(function(a,b,c) {
console.log("three",a,b,c,this)
},["string", "number", "string"])
.add(function(a,b,c,d) {
console.log("four",a,b,c,d,this)
})
.load("func"); //在这里的参数就是要创建的重载函数的方法名称。
s.func("a","b");

时间: 2024-10-25 06:00:40

添加JavaScript重载函数的辅助方法2_javascript技巧的相关文章

为JavaScript添加重载函数的辅助方法_javascript技巧

JavaScript的重载函数,一般是靠对arguments判断来操作的. 比如: 复制代码 代码如下: var afunc = function() { args = arguments; if(args.length == 1) { console.log(1); }else if(args.length == 2) { console.log(2); }else if (args.length == 3) { console.log(3); } } 可以想象如果重载数量多的时候,要有多少的

JavaScript通过字符串调用函数的实现方法_javascript技巧

本文实例讲述了JavaScript通过字符串调用函数的实现方法.分享给大家供大家参考.具体分析如下: JavaScript中我们可以把根据函数名的字符串来调用函数,这样我们就可以实现动态函数调用,只需要传递一个函数的名字即可调用该函数. 复制代码 代码如下: var strFun = "someFunction"; //Name of the function to be called var strParam = "this is the parameter";

JavaScript添加随滚动条滚动窗体的方法_javascript技巧

本文实例讲述了JavaScript中添加随滚动条滚动窗体的方法.分享给大家供大家参考,具体如下: 两种实现方式: 第一种: <script type=/"text/javascript/"> function scrollImg(){ var posX,posY; if (window.innerHeight) { posX = window.pageXOffset; posY = window.pageYOffset; } else if (document.docume

javascript针对不确定函数的执行方法_javascript技巧

本文实例分析了javascript针对不确定函数的执行方法.分享给大家供大家参考,具体如下: 在javascript中,有时候只知道一个函数的名字,但并不确定该函数有没有,如何判断该函数是否存在,并执行呢.一个方法是用eval() 执行拼接的程序字符串,但可能带来性能问题.另一个方法是使用符号属性的方式来访问函数,因为函数都是window对象的属性. 利用window[函数名] 来代表该function对象,用window[函数名]()来执行或调用该函数. 例子: <html> <hea

JavaScript实现为指定对象添加多个事件处理程序的方法_javascript技巧

本文实例讲述了JavaScript实现为指定对象添加多个事件处理程序的方法.分享给大家供大家参考.具体如下: 如果你希望对象点击的时候同时处理多个事情,可以使用下面的代码 /* Start of the multihandle Object...*/ function MultiHandle(owner){ var my_handlers = new Array(); var my_owner = owner; this.append = function(handler){ my_handle

JavaScript在网页中画圆的函数arc使用方法_javascript技巧

一.arc所需要的参数设置 复制代码 代码如下: arc(x, y, radius, startAngle, endAngle, counterclockwise); 其中x,y,radius都很容易理解,那么重点说说startAngle,endAngle和counterclockwise三个参数! 二.arc参数详解     1,startAngle和endAngle分别指圆开始的角度和结束的角度,手册上面说的是开始的角度为0,结束的角度为Math.PI*2,这样正好画一个圆     2,下面

javascript中利用柯里化函数实现bind方法_javascript技巧

柯理化函数思想:一个js预先处理的思想:利用函数执行可以形成一个不销毁的作用域的原理,把需要预先处理的内容都储存在这个不销毁的作用域中,并且返回一个小函数,以后我们执行的都是小函数,在小函数中把之前预先存储的值进行相关的操作处理即可: 柯里化函数主要起到预处理的作用:bind方法的作用:把传递进来的callback回调方法中的this预先处理为上下文context; /** * bind方法实现原理1 * @param callback [Function] 回调函数 * @param cont

JavaScript脚本库编写的方法_javascript技巧

JavaScript就是所谓的客户端脚本语言,是一种在互联网浏览器(浏览器也称为Web客户端,因为它连接到Web服务器上,以下载页面)内部运行的计算机编程语言.JavaScript的工作方式很有趣.普通网页内都会插入一些JavaScript代码.当浏览器加载该页面时,浏览器的内置解释器将读取并运行它在该页面中找到的JavaScript代码. 做Web开发已经四年,或多或少积累了一些JavaScript脚本.比如,限制input只允许输入数字的脚本:敲回车自动转到下一个控件,相当于Tab键的作用一

JavaScript 匿名函数和闭包介绍_javascript技巧

匿名函数:没有名字的函数; 闭包:可访问一个函数作用域里的变量的函数; 一 匿名函数 // 普通函数 function box(){ // 函数名是box; return 'Lee'; } box(); // =>Lee; 调用函数; // 匿名函数 function(){ // 匿名函数,会报错; return 'Lee'; } // 通过表达式自我执行 (function(name){ console.log(name); // =>Lee; })("Lee"); //