Skip to content

Instantly share code, notes, and snippets.

@ScalableJS
Last active December 10, 2015 22:38
Show Gist options
  • Save ScalableJS/4503307 to your computer and use it in GitHub Desktop.
Save ScalableJS/4503307 to your computer and use it in GitHub Desktop.
/**
* Класс для работы с приватными переменными
* @param data {Object|undefined} необязательный параметр
* @constructor
*/
var PrivateValue = function (data) {
/**
* Установка переменных ключ значение или селектор значение
* @param name {String}
* @param val {*}
* @return {PrivateValue}
*/
this.SetParam = function (name, val) {
if (this.type(val) == "object") {
val = this.CloneObj(val);
}
var t = this, objVars = _vars, arrParam = name.split("."), lastElem = arrParam.length - 1;
for (var n = 0; n < arrParam.length; n++) {
var itemVal = arrParam[n];
objVars = objVars[itemVal] = lastElem == n ? val : objVars[itemVal] || {};
}
return t;
};
/**
* Возвращает копии всех переменных
* @return {*}
*/
this.GetAllParam = function () {
return this.CloneObj(_vars);
};
/**
* Возвращает копию переменной
* @param name {String}
* @return {*}
*/
this.GetParam = function (name) {
var t = this, objVars = this.CloneObj(_vars), arrParam = name.split(".");
for (var item in objVars) {
if (objVars.hasOwnProperty(item)) {
objVars = objVars[item];
}
}
/*for (var n = 0; n < arrParam.length; n++) {
objVars = objVars[n];
}*/
return objVars;
};
/**
* Очистка переменных
* @return {PrivateValue}
*/
this.Clear = function () {
_vars = {};
return this;
};
/**
* Вставка в переменную-масив значение
* @param name {String}
* @param val {*}
* @param i {Number}
* @return {PrivateValue}
*/
this.PushParam = function (name, val, i) {
var t = this;
var arr = t.GetParam(name);
if (this.type(i) == "number") {
arr[i] = val;
} else {
arr.push(val);
}
t.SetParam(name, arr);
return t;
};
/**
* Клонирование объектов
* @param objIn
* @return {Object}
*/
this.CloneObj = function (objIn) {
var t = this, objOut = {};
for (var item in objIn) {
if (objIn.hasOwnProperty(item)) {
objOut[item] = objIn[item];
}
}
return objOut;
};
/**
* Boolean Number String Function Array Date RegExp Object (null, undefined)
* Проверка типов
* @param obj {*}
* @return {String}
*/
this.type = new function (obj) {
var class2type = {};
var arr = "Boolean Number String Function Array Date RegExp Object".split(" ");
for (var n = 0; n < arr.length; n++) {
class2type[ "[object " + arr[n] + "]" ] = arr[n].toLowerCase();
}
return function (obj) {
return obj == null ?
String(obj):
class2type[Object.prototype.toString.call(obj)] || "object";
}
};
/* private value */
var _vars = this.CloneObj(data || {});
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment