【问题标题】:How to get parent object when context is function?上下文为函数时如何获取父对象?
【发布时间】:2016-06-16 09:42:54
【问题描述】:

我想为对象方法编写 curring 函数。我想让这成为可能:

Function.prototype.curry = function (){
  var originalFunction = this;
  var args = ...; // here goes logic embracing arguments
  var bind = ???; //how to get reference to someObject ???
  return function(){
    return originalFunction.apply(bind, args);
  }
}

var someObject = {
  doSomething : function (param1, param2, param3){
    //do something with params
    return param1 + ' ' + param2 + ' ' + param3;
  }
}

someObject.doSomethingCurried = someObject.doSomething.curry('param1 value', 'param2 value');

//I want to be able to do:
someObject.doSomethingCurried('param3 value')'

【问题讨论】:

    标签: javascript inheritance partial-application


    【解决方案1】:

    some tricks,但实际上你应该只传递上下文作为第一个参数,如原生bind

    【讨论】:

      【解决方案2】:

      // Code goes here
      
      Function.prototype.curry = function (context,arg){
        var originalFunction = this;
        var args = Array.prototype.slice.call(arguments,1) ; // here goes logic embracing arguments
        var bind = context; //how to get reference to someObject ???
        return function(){
          return originalFunction.apply(bind, args.concat(Array.prototype.slice.call(arguments)));
        }
      }
      
      var someObject = {
        myObj:"Myobj",
        doSomething : function (param1, param2, param3){
          console.log(this);
          //do something with params
          return param1 + ' ' + param2 + ' ' + param3;
        }
      }
      
      someObject.doSomethingCurried = someObject.doSomething.curry(someObject,'param1 value', 'param2 value');
      
      //I want to be able to do:
      console.log(someObject.doSomethingCurried('param3 value'));

      【讨论】:

        猜你喜欢
        • 2021-01-10
        • 1970-01-01
        • 2015-07-17
        • 2019-11-09
        • 2017-11-23
        • 1970-01-01
        • 2023-03-09
        • 2012-06-10
        • 2022-12-15
        相关资源
        最近更新 更多