繁体   English   中英

为什么yelded object '#<object> ' 只读?<div id="text_translate"><p> 我使用 yield 实现了一个简单的搜索 - 通过递归文件夹结构运行,产生所有文件夹。 我的实现相当简单,我删除了所有“const”(以防万一)</p><pre> function *folders(f: Folder): IterableIterator&lt;Folder&gt; { yield f; if (f.folders) { for (let sf of f.folders) { yield* folders(sf); } } } function *allFolders(): IterableIterator&lt;Folder&gt; { for (let p of projects) { yield* folders(p.project.rootFolder!) } }</pre><p> 当我尝试修改返回的 object</p><pre> let folders = allFolders(); let t = folders.next().value; t.name = "sdvs";</pre><p> 我明白了</p><pre>TypeError: Cannot assign to read only property 'name' of object '#&lt;Object&gt;'</pre><p> 如果我直接访问 object (它位于此文件中的全局 scope 中)就可以了。 我现在已经花了几个小时在这上面,我完全感到困惑。 这根本不可能吗? 为什么会发生这种情况?</p></div></object>

[英]Why is yelded object '#<Object>' read-only?

我使用 yield 实现了一个简单的搜索 - 通过递归文件夹结构运行,产生所有文件夹。 我的实现相当简单,我删除了所有“const”(以防万一)

function *folders(f: Folder) : IterableIterator<Folder> {
    yield f;
    if (f.folders)
    {
        for (let sf of f.folders) {
            yield* folders(sf);
        }    
    }
}

function *allFolders() : IterableIterator<Folder> {
    for (let p of projects) {
        yield* folders(p.project.rootFolder!)
    }
}

当我尝试修改返回的 object

let folders = allFolders();
let t = folders.next().value;
t.name = "sdvs";

我明白了

TypeError: Cannot assign to read only property 'name' of object '#<Object>'

如果我直接访问 object (它位于此文件中的全局 scope 中)就可以了。 我现在已经花了几个小时在这上面,我完全感到困惑。 这根本不可能吗? 为什么会发生这种情况?

啊 - 我的问题是我在我的减速器中使用了 immer(某处备份树),在某些时候这个实例被浅克隆并传递给我的减速器(它是假数据库的数据)。

通过在从我的假数据库返回任何数据之前进行深度克隆来修复。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM