UNPKG

jquery-toad

Version:

jQuery TOAD - O velho e querido jQuery

101 lines (75 loc) 2.61 kB
$namespace(1, '@', function (exports) { var utils = $require('utils'), internals = exports.__internals__ = exports.__internals__ || {}; internals.PlainObjectCloner = PlainObjectCloner; /** * Clonador de objetos * * @param {object} target - Object to clone */ function PlainObjectCloner(target) { this.target = target; this.cloning = []; this.validTypes = [ (typeof true), (typeof 0), (typeof ''), (typeof {}) ]; } PlainObjectCloner.prototype.isValidProp = function (prop) { return this.validTypes.indexOf(typeof prop) >= 0; } PlainObjectCloner.prototype.cloneArray = function (target) { if (!utils.isArray(target)) return; var arr = []; for (var p in target) { var prop = target[p]; if (!this.isValidProp(prop)) continue; if (this.cloning.indexOf(prop) >= 0) throw new Error('Circular reference detected!'); this.cloning.push(prop); if (utils.isArray(prop)) { arr.push(this.cloneArray(prop)); } else if (utils.isObject(prop)) { arr.push(this.cloneObject(prop)); } else { arr.push(prop); } var cloningIdx = this.cloning.indexOf(prop); this.cloning.splice(cloningIdx, 1); } return arr; } PlainObjectCloner.prototype.cloneObject = function () { var target = arguments[0] || this.target; if (utils.isArray(target)) { return this.cloneArray(target); } if (!utils.isObject(target)) return; var clone = {}; for (var p in target) { var prop = target[p]; if (!this.isValidProp(prop)) continue; if (this.cloning.indexOf(prop) >= 0) throw new Error('Circular reference detected!'); this.cloning.push(prop); if (utils.isArray(prop)) { clone[p] = this.cloneArray(prop); } else if (utils.isObject(prop)) { clone[p] = this.cloneObject(prop); } else { clone[p] = prop; } var cloningIdx = this.cloning.indexOf(prop); this.cloning.splice(cloningIdx, 1); } return clone; } })