ImmutableJS无法使用新的自定义对象实例

时间:2016-09-02 10:44:57

标签: javascript constructor immutability immutable.js

在原始JS对象上使用Immutable.fromJS()按预期工作并返回Map,但尝试使用从构造函数获取的自定义对象执行相同的Immutable.fromJS()不会工作。

意义:

  • {/*1*/}console.log返回自定义对象。
  • {/*2*/}console.log返回相同的自定义对象,即使我使用了Immutable.fromJS()
  • {/*3*/}console.log返回自定义对象。
  • {/*4*/}console.log按预期返回map = Immutable.fromJS()

我在文档中找不到任何解释。

{/*EXPORTING CONSTRUCTOR*/}
export function MyObject() {
  this.id = null;
  this.name = '';
}

{/*EXPORTING RAW OBJECT*/}
export my_object = {
  this.id = null;
  this.name = '';
}

//in another file
//importing, and than:

let myConstructedObject = new MyObject();
let myRawObject = my_object;

{/*1*/} console.log(myConstructedObject) // => object
{/*2*/} console.log(Immutable.fromJS(myConstructedObject)) // => object ?!?!

{/*3*/} console.log(myRawObject) // => object
{/*4*/} console.log(Immutable.fromJS(myRawObject)) // => map (OK!)

1 个答案:

答案 0 :(得分:1)

我认为本主题中的人:How do I make a custom immutable type using facebook/immutable-js?实际上从建设性角度讨论了同样的问题。

总结讨论,你不能只是" Immutivize"一个自定义对象,但您可以使用Immutable.Record(使用纯ImmutableJS)或Map(使用& 39'可扩展不可变'库)自己编写不可变对象。