据我所知,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]
答案 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