metatype
Version:
a simple bit of code for using objects and prototypes as if you were writing javascript.
37 lines (35 loc) • 1.18 kB
JavaScript
(function (definition) {
typeof define === "function" && define.amd ?
define(definition) :
typeof module !== "undefined" && module.exports ?
module.exports = definition() :
this.metatype = definition();
})(function () {
function init (obj, args) {
return (obj.init && obj.init.apply(obj, args)), obj;
}
function getter (obj, key) {
return (obj && obj[key]) ? obj[key] : void 0;
}
return {
extend: function extend () {
return [].reduce.call(arguments, Object.create, this);
},
create: function create () {
return init(Object.create(this), arguments);
},
get: function get (keys) {
return keys.split(/\./).reduce(getter, this);
},
set: function set (keys, value) {
var keys = keys.split(/\./),
obj = this,
key;
while (key = keys.shift(), keys.length) {
obj = typeof obj[key] !== "undefined" ? obj[key] :
obj[key] = +keys[0] === +keys[0] ? [] : {};
}
return !keys.length ? obj[key] = value : null;
}
};
});