具有静态箭头功能的类
我目前正在实施static land规范(幻想土地的替代方案)。我不仅要使用普通对象作为类型,还要使用静态方法使用ES2015类。我已经将这些静态方法实现为咖喱形式的箭头函数,而不是常规函数。但是,这是不可能的ES2015类:具有静态箭头功能的类
class List extends Array {
static map = f => xs => xs.map(x => f(x))
static of = x => [x]
}
我map
并不需要自己this
,因为它仅仅是对List
构造一个咖喱功能。为了使其工作,我必须写static map(f) { return xs => xs.map(x => f(x)) }
,这是非常烦人的。
- 为什么我不能在ES2015类中使用箭头函数和赋值表达式?
- 无论如何,有没有简明的方法来实现我的目标?
为什么我不能在ES2015类中使用箭头函数和赋值表达式?
因为那是ES2015类语法是不如何设计 — 现在,请参阅下面的线下。
是否有简明的方法来实现我的目标呢?
目前还不清楚,我认为你想要类可言,只是一个对象:(。你说,延长对你在做什么重要的)
const List = {
map: f => xs => xs.map(x => f(x)),
of: x => [x]
};
但是如果你想List
扩展Array
(例如,你将有实例),但是这些静态添加到它,你需要两个步骤:
class List extends Array {
}
Object.assign(List, {
map: f => xs => xs.map(x => f(x)),
of: x => [x]
});
如果你希望他们不可枚举的或不可配置,等等,你会想Object.defineProperties
而非Object.assign
;我会离开,作为一个练习留给读者......
有A类stage 2 proposal“领域”,包括静态字段。如果进展到阶段4,最终它将成为即将到来的语言规范的一部分(可能ES2018;在这一点上不太可能使ES2017,但你永远不知道)。
这将允许类中声明的静态域,几乎是完全相同的方式,你向他们展示:
// NOT IN THE LANGUAGE YET, BUT A PROPOSAL AT STAGE 2
class List extends Array {
static map = f => xs => xs.map(x => f(x));
static of = x => [x];
}
如果你有通天transpile,你可以告诉它包括第2点阶段的建议。
感谢您的链接和快速回复。 – ftor
如果一切都是静态的,为什么'扩展数组'? –
https://stackoverflow.com/questions/32545495/es6-class-instance-properties可能的重复? – Bergi
@ T.J。这个想法是使现有的图书馆静态土地兼容。所以会有非静态属性的类,它们必须被扩展。 – ftor