Add Zotero.extendClass
This commit is contained in:
parent
f7220378dd
commit
9700cdde38
1 changed files with 40 additions and 0 deletions
|
@ -1613,6 +1613,46 @@ Components.utils.import("resource://gre/modules/osfile.jsm");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines property on the object
|
||||||
|
* More compact way to do Object.defineProperty
|
||||||
|
*
|
||||||
|
* @param {Object} obj Target object
|
||||||
|
* @param {String} prop Property to be defined
|
||||||
|
* @param {Object} desc Propery descriptor. If not overriden, "enumerable" is true
|
||||||
|
* @param {Object} opts Options:
|
||||||
|
* lateInit {Boolean} If true, the _getter_ is intended for late
|
||||||
|
* initialization of the property. The getter is replaced with a simple
|
||||||
|
* property once initialized.
|
||||||
|
*/
|
||||||
|
this.defineProperty = function(obj, prop, desc, opts) {
|
||||||
|
if (typeof prop != 'string') throw new Error("Property must be a string");
|
||||||
|
var d = { __proto__: null, enumerable: true, configurable: true }; // Enumerable by default
|
||||||
|
for (let p in desc) {
|
||||||
|
if (!desc.hasOwnProperty(p)) continue;
|
||||||
|
d[p] = desc[p];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (opts) {
|
||||||
|
if (opts.lateInit && d.get) {
|
||||||
|
let getter = d.get;
|
||||||
|
d.get = function() {
|
||||||
|
var val = getter.call(this);
|
||||||
|
this[prop] = val; // Replace getter with value
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Object.defineProperty(obj, prop, d);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.extendClass = function(superClass, newClass) {
|
||||||
|
newClass._super = superClass;
|
||||||
|
newClass.prototype = Object.create(superClass.prototype);
|
||||||
|
newClass.prototype.constructor = newClass;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allow other events (e.g., UI updates) on main thread to be processed if necessary
|
* Allow other events (e.g., UI updates) on main thread to be processed if necessary
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in a new issue