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);