s9s-objects
Version:
Global object container, used across projects
94 lines (83 loc) • 1.79 kB
JavaScript
;
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 '';
}
};