如果我重复一个rxjs.Observable.of(obj),是obj克隆了吗?为什么我无法修改它?

时间:2018-01-16 22:53:07

标签: javascript rxjs reactivex

据我所知,javascript传递对象作为参考。因此,如果我调用一个以对象作为参数的函数,该函数可以修改它。我写了这段代码:

var rxjs = require("rxjs")

var obj = {}

var stream = rxjs.Observable.of(obj).
do((x)=>{x.index=isNaN(x.index)?x.index=0:x.index++; return x}).
repeat(10).
subscribe(console.log);

如果index尚不存在,则定义obj属性,如果已存在则增加{index: 0} {index: 1} {index: 2} ... 属性。由于我创建了一个对象的可观察对象,因此observable应该能够修改obj,对吧?所以我应该期待看到输出:

{index: 0}
{index: 0}
{index: 0}
...

但是我看到的是

[CF Type].[CF TYPE].&[6] 

1 个答案:

答案 0 :(得分:0)

如果你愿意的话,它没有被克隆,你可以修改它。

您的问题是后缀++运算符返回前一个值,因此分配给x.index的值将始终为零。改为使用前缀++

do(x => { x.index = isNaN(x.index) ? x.index = 0 : ++x.index; return x; })

此外,传递给next的{​​{1}}函数的返回值将被忽略,因此do是多余的。

或者,您可以使用postfix return运算符,只需将作业放到++

x.index