包化,集化,方法化—有关Qwrap的三个算子

本文介绍了一种利用JavaScript高阶函数实现元素操作的方法。通过自定义`mul`、`methodize`和`rwrap`等函数,实现了对DOM元素批量获取值与设置值的功能,并展示了如何将这些函数应用到自定义对象上。
[javascript] function mul(func){ return function(){ if(arguments[0] instanceof Array){ var ret = [] for(var i=0,len = arguments[0].length;i<len;i++){ r= func.apply(null,[arguments[0][i]].concat([].slice.call(arguments,1))); ret.push(r); } return ret; }else{ return func.apply(null,arguments); } } } function methodize(func,chain){ return function(){ var ret = func.apply(null,[this.core].concat([].slice.call(arguments))); return chain?this:ret; } }; function rwrap(func,wrapper,idx){ idx=idx|0; return function(){ var ret = func.apply(this, arguments); if(idx>=0) ret=arguments[idx]; return wrapper ? new wrapper(ret) : ret; } } [/javascript] 然后我们可以这样来使用 [javascript] function $(id){ return document.getElementById(id); } function getValue(el){ el.style.background = 'red'; }; function setValue(el,value){ el.innerHTML = value; return 'hehe'; }; function w(core){ this.tt = core; return core; } function test(core){ this.core = core; }; test.prototype.set = methodize(rwrap(mul(setValue),w,0),true); test.prototype.get = methodize(mul(getValue),true); var ret = (new test([$('id1'),$('id2')])).get().set('-000-'); console.info( ret ); [/javascript]

转载于:https://www.cnblogs.com/7hihi/archive/2011/03/15/2564250.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值