【小技巧】QWrap核心中的几个不起眼小方法使用技巧(一)
March 16th, 2011
1. ObjectH.dump
用ObjectH.dump 方法可以将非枚举类型的方法从原生对象中“提取”出来
- QW.ObjectH.mix(window, QW);
- var ah = ObjectH.dump(Array, ["join","reverse","push","pop","concat","slice","splice"]); //提出Array的以上方法
- ah.toString = function(arr){
- return arr.toString();
- }
- var List = function(arr){
- this.items = arr;
- }
- ah = HelperH.methodize(ah, "items");
- ObjectH.mix(List.prototype, ah, true);
- var myList = new List([1,2,3,4]);
- myList.push(5);
- alert(myList); //[1,2,3,4,5]
2.ObjectH.create
ObjectH.create方法可以利用对象的原型快速创建一个新对象,例如:
- function Foo(x, y){
- this.x = x;
- this.y = y;
- }
- var f1 = new Foo(1,2);
- var f2 = ObjectH.create(f1,{x:3,y:4}); //相当于 f2 = new Foo(3,4);
这个用在需要copy匿名类的对象或者多态类的设计模式里边的对象复制特别有效(例如在装饰器里,你在复制对象进行操作之前不必关心具体的装饰器类型是哪一个,因为你只要保证复制出来的那个对象的类型和原始对象的类型相同就好了,而create确实保证了这个)
3. FunctionH.bind
实际上在ECMA v5的标准里,bind除了绑定this,还有固化参数的作用的,所以它能起到的作用类似于currying
- function Foo(x, y){
- return x+y;
- }
- var Foo5 = FunctionH.bind(Foo, null, 5);
- alert(Foo5(10)); //5+10
4. FunctionH.lazyApply
懒惰执行是一个不起眼的方法,但是它有时候很有用。
- function deal(x){
- var y = 0;
- for(var i = 0; i <= 10; i++){
- y += Math.pow(i, x);
- }
- alert(y);
- }
- FunctionH.lazyApply(deal,null,[2],0,function(){return Math.random()>0.5?1:-1;}); //只有一半的机会执行deal方法
QWrap 的第一次听说呢 好好看看