柯里化

Function.prototype.method = function(name,func){
   if(!this.hasOwnProperty(name)){ //不能直接用.name判断 返回值为:"Empty" ,还可以用[name] 方式,返回值为:undefine
       this.prototype[name] = func;
   }
   return this;
};

Function.method('curry',function(){ //原型中定义了method方法,此处可以省略prototype
  var slice = Array.prototype.slice,
      args = slice.apply(arguments),
      that = this;
  return function(){
      console.log(arguments);
      return that.apply(null,args.concat(slice.apply(arguments)));
  };
});
var add = function(a,b){
   return a+b;
};
var add1 = add.curry(4);
console.log(add1(6)); //10

 

不太明白:

Function.prototype.unCurrying = function () {  
    return this.call.bind(this);
};
var push = Array.prototype.push.unCurrying(),     
obj = {};
console.log(push);
push(obj, 'first', 'two');
console.log(obj);  //[object Object] {0: "first",1: "two",length: 2}

  

posted @ 2015-03-11 16:55  lcw5945  阅读(148)  评论(0编辑  收藏  举报