JSFiddle - React, Tailwind, and code Playground
JavaScript
var output = document.getElementById("x");
function Log()
{
console.log(arguments);
output.innerHTML += Array.prototype.slice.call(arguments).join(" - ") + "\n";
}
/* -------------------------------------------*/
function isPlainObject(obj)
{
if (typeof (obj) !== "object" || obj.nodeType || (obj instanceof Window))
return false;
try
{
if (obj.constructor &&
!({}).hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf"))
{
return false;
}
}
catch (e)
{
return false;
}
return true;
}
function extend(deep, target, source)
{
var copy, original, clone;
for (var attr in source)
{
copy = target[attr];
original = source[attr];
if (target === original)
continue;
// se for uma cópia profunda e o objeto for simples
if (deep && original && isPlainObject(original))
{
// obtem um objeto simples vazio para ser estendido
if (original instanceof Array)
{
clone = copy && (copy instanceof Array) ? copy : [];
}
else
{
clone = copy ? copy : {};
}
// recursivamente estende o objeto interno
target[attr] = extend(deep, clone, original);
}
else if (original !== undefined)
{
// copia o valor para o objeto de destino
// caso o objeto seja uma referencia o valor não é clonado
target[attr] = original;
}
}
// retorna o objeto estendido
return target;
}
function Pessoa(params)
{
this.id = params['id'];
this.nome = params['nome'];
this.pai = null;
this.toString = function () { return this.nome };
}
var luke = new Pessoa({ id: 1, nome: 'Luke' });
var vader = new Pessoa({ id: 2, nome: 'Darth' });
luke.pai = vader;
vader.pai...