使用ImmutableJS Record创建具有不同属性的子类

Phi*_*ess 5 javascript ecmascript-6 immutable.js

我们使用ES6和immutable.js来创建不可变的类.

class Animal extends Record({foo: ""});
Run Code Online (Sandbox Code Playgroud)

我如何从Animal继承并添加自定义属性,但仍然可以将其用作不可变的Record

class Animal extends Animal {}; // How to add the key "bar"?
Run Code Online (Sandbox Code Playgroud)

haz*_*ous 3

Record方法将创建的类型锁定,defaultValues并且不能用于进一步扩展属性。这是我在这里提到的抱怨之一。

如果你不太热衷于在运行时检查继承(instanceof),那么你可以这样做 -

let foo = {foo: ""};
class Animal extends Immutable.Record(foo){}
let bar = {bar: ""};
class Mammals extends Immutable.Record(Object.assign({}, foo, bar)){}
Run Code Online (Sandbox Code Playgroud)

虽然不能替代真正的继承,但它可以让您稍微重用模式。方法不会以这种方式继承。