aboutsummaryrefslogtreecommitdiffstats
path: root/lib/utils.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/utils.js')
-rw-r--r--lib/utils.js32
1 files changed, 32 insertions, 0 deletions
diff --git a/lib/utils.js b/lib/utils.js
new file mode 100644
index 00000000..86c868b8
--- /dev/null
+++ b/lib/utils.js
@@ -0,0 +1,32 @@
+var utils = {
+ deepcopy: function(original) {
+ var result;
+ if (typeof original == 'object') {
+ if (original === null) {
+ result = null;
+ } else {
+ result = original.constructor === Array ? [] : {};
+ for (var i in original)
+ if (original.hasOwnProperty(i))
+ result[i] = this.deepcopy(original[i]);
+ }
+ } else {
+ result = original;
+ }
+
+ return result;
+ },
+ extendWithSuper: function(original, ext) {
+ var result = this.deepcopy(original);
+ var tmpSuper = result._super;
+ result._superFunctions = {};
+ result._super = function(fname) { return this._superFunctions[fname].bind(this); }
+ for (var i in ext)
+ if (ext.hasOwnProperty(i)) {
+ if (typeof ext[i] == 'function' && typeof original[i] == 'function')
+ result._superFunctions[i] = this.deepcopy(original[i]);
+ result[i] = this.deepcopy(ext[i]);
+ }
+ return result;
+ },
+};