JSFiddle - React, Tailwind, and code Playground

HTML

<body id="body">
</body>

JavaScript

function cloneObject(source) {
    var key,value;
    var clone = Object.create(source);

    for (key in source) {
        if (source.hasOwnProperty(key) === true) {
            value = source[key];

            if (value!==null && typeof value==="object") {
                clone[key] = cloneObject(value);
            } else {
                clone[key] = value;
            }
        }
    }
    return clone;
}

function out(str) {
    document.getElementById('body').innerHTML += str + "<br>";
}

var SomeObj = function () {
  var obj = {
    _val: 0,
    set val(value) {
       out("Set: " + value);
      	this._val = value;
    },
    get val() {
      	return this._val;
    }
  }
  return obj;
};

var sObj = { 
    type : 'some',
    o : new SomeObj(),
    id  : 900
};
sObj.o.val = 100;

var sCopy = cloneObject(sObj);
sCopy.o.val = 200;

out(sObj.o.val);