先贴一下代码
var addMethod=function(object,name,fn){
var old = object[name]
object[name]=function(){
if(fn.length==arguments.length){
return fn.apply(this.arguments)
}else if(typeof old == 'function'){
return old.apply(this,arguments)
}
}
}
var people=['a','b','c'];
addMethod(people,'find',function(){
return this.values
})
addMethod(people,'find',function(firstname){
return 1
})
addMethod(people,'find',function(firstname,lastname){
return 2
})
alert(people.find())
简单介绍下代码的运行过程:首先声明了一个添加方法的方法,然后声明了一个数组。之后分别调用三个不同的添加函数的方法,由于存在闭包,old中存储了之前的find方法,下次调用old方法时会从addMethod中提取,就像链表一样本次存储上次的数据的引用,这样就实现了重载的效果。