extendscript-es5-shim
Version:
a collection of useful es5-shims for Extendscript
65 lines (49 loc) • 1.66 kB
JavaScript
/*
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperties#Polyfill
*/
if (!Object.defineProperties) {
Object.defineProperties = function(object, props) {
function hasProperty(obj, prop) {
return Object.prototype.hasOwnProperty.call(obj, prop);
}
function convertToDescriptor(desc) {
if (Object(desc) !== desc) {
throw new TypeError('Descriptor can only be an Object.');
}
var d = {};
if (hasProperty(desc, "enumerable")) {
d.enumerable = !!desc.enumerable;
}
if (hasProperty(desc, "configurable")) {
d.configurable = !!desc.configurable;
}
if (hasProperty(desc, "value")) {
d.value = desc.value;
}
if (hasProperty(desc, "writable")) {
d.writable = !!desc.writable;
}
if (hasProperty(desc, "get")) {
throw new TypeError('getters & setters can not be defined on this javascript engine');
}
if (hasProperty(desc, "set")) {
throw new TypeError('getters & setters can not be defined on this javascript engine');
}
return d;
}
if (Object(object) !== object) {
throw new TypeError('Object.defineProperties can only be called on Objects.');
}
if (Object(props) !== props) {
throw new TypeError('Properties can only be an Object.');
}
var properties = Object(props);
for (propName in properties) {
if (hasOwnProperty.call(properties, propName)) {
var descr = convertToDescriptor(properties[propName]);
object[propName] = descr.value;
}
}
return object;
}
}