<input type="text" id="a" />
<input type="text" id="b" />
<input type="text" id="c" />
<script type="text/javascript">
Function.prototype.$continuous = function(fn) {
var me = this;
return function(){
// 主要就是在这个包装函数里.判断形参和实参个数.如果形参 > 实参(moreArgs.length > 0);就调用
// reducer或者processer进行递归操作
var currentArgs = Array.prototype.slice.call(arguments, 0, me.length);
var moreArgs = Array.prototype.slice.call(arguments, me.length);
ret = me.apply(this, currentArgs);
if(moreArgs.length > 0) {
ret = fn.call(this, arguments.callee, ret, moreArgs);
}
return ret;
}
}
function add(x, y){
return x + y;
}
function max(x, y) {
return x > y ? x : y;
}
// 先链接返回值和参数然后返回给函数递归调用
function reducer(target, returnValue, moreArgs) {
return target.apply(this, [returnValue].concat(moreArgs));
}
// 先进行递归调用 然后将返回值装载到数组
function processer(target, returnValue, moreArgs) {
return [returnValue].concat(target.apply(this, moreArgs));
}
// 连续加法运算
add = add.$continuous(reducer);
var a = add(1,2,3,4,5);
alert(a)
// 连续求最大值
max = max.$continuous(reducer);
var m = max(1,3,42,12,3);
alert(m)
// 返回元素数组
var $ = function(id) {
return document.getElementById(id);
}.$continuous(processer);
var els = $("a", "b", "c");
alert(els)
</script>