簡體   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