JSFiddle - React, Tailwind, and code Playground

JavaScript

if (typeof Object.create !== 'function') {
    Object.create = function (o) {
        function F() {}
        F.prototype = o;
        return new F();
    };
}

var flatObj = {
    firstname: "John",
    lastname: "Doe",
    age: 23
}

var nestObj = {
    sex: "female",
    info: {
        firstname: "Jane",
        lastname: "Dough",
        age: 32  
    }
}

var nestObj2 = {
    sex: "male",
    info: {
        firstname: "Arnold",
        lastname: "Schwarzenneger",
        age: 61  
    }
}    

var person1 = Object.create(flatObj);
var person2 = Object.create(nestObj);

var person3 = {
    sex: "male"
}
person3.info = Object.create(nestObj2.info);


alert('Inherited Ages - Person1: '+person1.age+', Person2: '+person2.info.age+', Person3: '+person3.info.age+'. Prototype Ages - flatObj: '+flatObj.age+', nestObj: '+nestObj.info.age+', nestObj2: '+nestObj2.info.age);

person1.age = 69;
person2.info.age = 96;
person3.info.age = 0;

alert('Updated Ages (prototypes should NOT change) - Person1: '+person1.age+', Person2: '+person2.info.age+', Person3: '+person3.info.age+'. Prototype Ages - flatObj: '+flatObj.age+', nestObj: '+nestObj.info.age+', nestObj2: '+nestObj2.info.age);

delete person1.age;
delete person2.info.age;
delete person3.info.age;

alert('Ages after Delete (deleted value in child-object should be reset to "default" values from parent - objects up the prototype chain should remain unaffected ) - Person1: '+person1.age+', Person2: '+person2.info.age+', Person3: '+person3.info.age+'. Prototype Ages - flatObj: '+flatObj.age+', nestObj: '+nestObj.info.age+', nestObj2: '+nestObj2.info.age);