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)代码>以获取真正的类方法