skip to Main Content

I want to do a deep copy of an object which also has function as keys.

So I do

deepCopy = structuredClone(existingObjWithFns);

However when this runs, I get the below error:

Uncaught (in promise) DOMException: Failed to execute ‘structuredClone’ on ‘Window’: function MyFunction()

2

Answers


  1. Function objects cannot be duplicated by the structured clone algorithm; attempting to throws a DataCloneError exception.

    for more information, you can read MDN

    if you want to deep clone nested objects, you should make a function to check the type of all of them and copy them one by one.

    Lodash deepClone work with all types, function,s and Symbol copied by reference I suggest that you use Lodash.

    but with the object.assign() you can do it faster:

    const target = { a: () => { return 1 }, b: 2 };
    const source = { b: 4, c: 5 };
    
    const returnedTarget = Object.assign(target, source);
    
    console.log(target);
    // Expected output: Object { a: 1, b: 4, c: 5 }
    
    console.log(returnedTarget === target);
    // Expected output: true
    

    for more information about object cloning you can follow this link

    Login or Signup to reply.
  2. structuredClone is not available on Browsers stack or on plain javascript. It is a latest feature of Nodejs.

    Best way on Browser or plain javascript is to use Lodash.

    const _ = require('lodash');
       
    var obj = {
        anyField: 23
    };
       
    // Here is structured clone so it won't get copied
    var deepCopy = _.cloneDeep(obj);
       
    console.log('Comparing original with'
        + ' deep ', obj === deepCopy);
       
    obj.anyField = 10; // Changing original value
       
    console.log('After changing original value');
       
    console.log("Original value ", obj);
       
    console.log("Deep Copy value ", deepCopy);
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search