先贴一下代码
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中提取,就像链表一样本次存储上次的数据的引用,这样就实现了重载的效果。
博客展示了一段JavaScript代码,通过声明添加方法的函数,对数组多次调用添加函数的方法。利用闭包特性,让old存储之前的方法,像链表一样存储上次数据的引用,从而实现了方法重载的效果。
587

被折叠的 条评论
为什么被折叠?



