簡體   English   中英

如何在JS中創建對象的可變且不可變的副本

[英]How to create mutable AND immutable copy of object in JS

在不使用任何其他庫的情況下,如何創建對象的不可變副本並保留可變副本。

var mutableCopy = immutableData;

Object.freeze(immutableData);

mutableCopy.newProp = 'mutated!';

console.log(mutableCopy.hasOwnProperty('newProp')); // false

似乎Object.freeze()也通過引用凍結對象。

如何創建對象的可變且不可變的副本?

var objCopy = {};

for ( var propKey in objToClone )
    objCopy[ propKey ] = objToClone[ propKey ];

並根據您的喜好凍結對象。 如果您有一個更復雜/更深的對象,並且需要對那些更深的屬性進行突變,那么我可能會使用一些像

var objCopy = JSON.parse( JSON.stringify( objToClone ) );

您說得對,這是傳遞引用與傳遞值的問題。 實際上,引用傳遞發生在第一行。 mutableCopyimmutableData指向JS堆上的同一對象。

您應該做的是制作一個新對象,該對象與舊對象重復。 然后,凍結新對象將把舊對象保留為可變副本,同時防止修改。

var newObj = {}
for (var key in obj) {
    if (obj.hasOwnProperty(key)) {
        newObj[key] = obj[key];
    }
}

Object.freeze(newObj);

當然,您可以將新對象設為可變副本,而將舊對象設為不變的副本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM