[英]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 ) );
您說得對,這是傳遞引用與傳遞值的問題。 實際上,引用傳遞發生在第一行。 mutableCopy
和immutableData
指向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.