Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从其他类方法创建ES6类方法_Javascript_Ecmascript 6_Currying_Es6 Class - Fatal编程技术网

Javascript 从其他类方法创建ES6类方法

Javascript 从其他类方法创建ES6类方法,javascript,ecmascript-6,currying,es6-class,Javascript,Ecmascript 6,Currying,Es6 Class,所以我有一个用咖喱方法的类 class myClass { constructor () {} curry (a,b) { return (a,b) => {} } } 现在可以用咖喱制作另一种方法了吗?像这样的 class myClass { constructor () {} curry (a,b) { return (a,b) => {} } newMethod = curry() } 是的,您可以很容易地做到这一点-只需

所以我有一个用咖喱方法的类

class myClass {
  constructor () {}

  curry (a,b) {
    return (a,b) => {}
  }

}
现在可以用咖喱制作另一种方法了吗?像这样的

class myClass {
  constructor () {}

  curry (a,b) {
    return (a,b) => {}
  }

  newMethod = curry()
}

是的,您可以很容易地做到这一点-只需将其放入构造函数中:

class MyClass {
  constructor() {
    this.newMethod = this.curriedMethod('a') // partial application
  }

  curriedMethod(a) {
    return (b) => {
      console.log(a,b);
    }
  }
}

let x = new MyClass();
x.newMethod('b')

是的,您可以很容易地做到这一点-只需将其放入构造函数中:

class MyClass {
  constructor() {
    this.newMethod = this.curriedMethod('a') // partial application
  }

  curriedMethod(a) {
    return (b) => {
      console.log(a,b);
    }
  }
}

let x = new MyClass();
x.newMethod('b')

我不相信“咖喱”是正确的说法。“一个返回函数的方法”会更精确。@JLRishe我想他的意思是curry,也就是函数编程。在ES6类中,实例总是返回的,所以我认为他的问题的答案是“否”。@JLRishe我可以创建一个返回函数的方法,我的问题是“我可以从返回函数的方法创建一个方法吗?”您可以将任何函数作为方法添加到对象中。不确定这个问题是关于什么的。@NielsSteenbeek是一种机制,允许将函数调用分解为一系列单参数调用。OP的例子采用了两个参数,所以这不是陈词滥调。我认为这个问题可能会更好,如果OP跳过花哨的术语,用清晰的语言解释他们的要求。我不相信“currying”是正确的术语。“一个返回函数的方法”会更精确。@JLRishe我想他的意思是curry,也就是函数编程。在ES6类中,实例总是返回的,所以我认为他的问题的答案是“否”。@JLRishe我可以创建一个返回函数的方法,我的问题是“我可以从返回函数的方法创建一个方法吗?”您可以将任何函数作为方法添加到对象中。不确定这个问题是关于什么的。@NielsSteenbeek是一种机制,允许将函数调用分解为一系列单参数调用。OP的例子采用了两个参数,所以这不是陈词滥调。我认为这个问题可能会更好,如果OP跳过花哨的术语,用清晰的语言解释他们的要求。这里有一个问题。Curry函数现在位于类属性中,它不是真正的方法。不同之处在于,在初始化类之前确实存在一个方法。虽然在大多数情况下,这听起来像是吹毛求疵,但如果需要对类进行静态分析,情况会发生变化。(例如,angular AOT编译)根据哪个调用使用
this
关键字,还可以使用
const makeMethod=(a)=>函数(b){console.log(a,b,this);}带有
MyClass.prototype.newMethod1=makeMethod(1);MyClass.prototype.newMethod2=makeMethod(2)要获得真正的类方法,这里有一个问题。Curry函数现在位于类属性中,它不是真正的方法。不同之处在于,在初始化类之前确实存在一个方法。虽然在大多数情况下,这听起来像是吹毛求疵,但如果需要对类进行静态分析,情况会发生变化。(例如,angular AOT编译)根据哪个调用使用
this
关键字,还可以使用
const makeMethod=(a)=>函数(b){console.log(a,b,this);}带有
MyClass.prototype.newMethod1=makeMethod(1);MyClass.prototype.newMethod2=makeMethod(2)以获取真正的类方法