UNPKG

s9s-objects

Version:

Global object container, used across projects

94 lines (83 loc) 1.79 kB
'use strict'; exports = module.exports = AbstractObject; const JavascriptTypes = require(__dirname + '/JavascriptTypes'); /** * @constructor * @extends {Object} * @abstract */ function AbstractObject() { } /** * @type {Object} * @extends {Object} */ AbstractObject.prototype = {}; /** * @param data * @param constructors */ AbstractObject.prototype.applyData = function (data, constructors) { constructors = constructors || {}; for (var a in data) { if (data.hasOwnProperty(a)) { if (a in constructors) { this[a] = new constructors[a](data[a]); } else { this[a] = data[a]; } } } }; /** * @param key * @param [fallback] * @returns {*} */ AbstractObject.prototype.getValue = function (key, fallback) { if (!(key in this) || typeof(this[key]) === JavascriptTypes.Undefined) { if (typeof(fallback) === JavascriptTypes.TypeFunction) { try { return new fallback(); } catch (e) { } } return fallback; } return this[key]; }; /** * Returns object id * @returns {*} */ AbstractObject.prototype.getId = function () { return this.getValue('id', null); }; /** * @returns {string} */ AbstractObject.prototype.getName = function () { return this.getValue('name', ''); }; /** * @returns {{}} */ AbstractObject.prototype.toRawObject = function () { var obj = {}; for (var i in this) { if (this.hasOwnProperty(i)) { obj[i] = this[i]; } } return obj; }; /** * @returns {string} */ AbstractObject.prototype.toJson = function () { try { return JSON.stringify(this.toRawObject()); } catch (e) { return ''; } };