JSFiddle - React, Tailwind, and code Playground

JavaScript

var cloneObj = function(obj){
  if(obj === null || typeof obj !== 'object') return obj;

  var temp = obj.constructor(); // give temp the original obj's constructor
  for (var key in obj) {
    temp[key] = cloneObj(obj[key]);
  }

  return temp;
};

var original = {
  a: ko.observable("a"),
  b: "b"
};

var cloned = cloneObj(original);

cloned.a("a cloned");
original.a();
console.log(cloned.a(), original.a()); //-> a cloned, a ERROR

original.a("a original"); 
console.log(cloned.a(), original.a()); //-> a cloned, a original ERROR
  
cloned.b = "b cloned";
console.log(cloned.b, original.b); //-> b cloned, b OK 

original.b = "b original";
console.log(cloned.b, original.b); //-> b cloned, b original OK