JSFiddle - React, Tailwind, and code Playground

by Fred Dollen

JavaScript

function Person(first, last) {
	this.FirstName = first;
	this.LastName = last;
	this.Residence = {};
}

Person.Revive = function (data) {
	return new Person(data.FirstName, data.LastName);
}

Object.defineProperty(Person.prototype, "FullName", {
	get: function() { return this.FirstName + " " + this.LastName; }
});

Person.prototype.toJSON = function () {
	this.__class__ = "Person";
	return this;
}

function Residence(lat, long) {
	this.Latitude = lat;
	this.Longitude = long;
}

Residence.prototype.toJSON = function () {
	this.__class__ = "Residence";
	return this;
}

Residence.Revive = function (data) {
	return new Residence(data.Latitude, data.Longitude);
}

Object.defineProperty(Residence.prototype, "Location", {
	get: function () { return this.Latitude + ", " + this.Longitude; }
});

var p = new Person("Foo", "Bar");
p.Residence = new Residence(44, 33);

console.log("Full name = " + p.FullName);
console.log("Location = " + p.Residence.Location);

var serialization = JSON.stringify(p);
console.log(serialization);

var rawObj = JSON.parse(serialization, function (key, value) {
	if (value instanceof Object && value.__class__ == 'Person') {
		return Person.Revive(value);
	}
	if (value instanceof Object && value.__class__ == 'Residence') {
		return Residence.Revive(value);
	}
	return value;
});

console.log("Full name = " + rawObj.FullName);
console.log("Location = " + rawObj.Residence.Location);