80 lines
1.9 KiB
JavaScript
80 lines
1.9 KiB
JavaScript
var isES5 = (function(){
|
|
"use strict";
|
|
return this === undefined;
|
|
})();
|
|
|
|
if (isES5) {
|
|
module.exports = {
|
|
freeze: Object.freeze,
|
|
defineProperty: Object.defineProperty,
|
|
getDescriptor: Object.getOwnPropertyDescriptor,
|
|
keys: Object.keys,
|
|
names: Object.getOwnPropertyNames,
|
|
getPrototypeOf: Object.getPrototypeOf,
|
|
isArray: Array.isArray,
|
|
isES5: isES5,
|
|
propertyIsWritable: function(obj, prop) {
|
|
var descriptor = Object.getOwnPropertyDescriptor(obj, prop);
|
|
return !!(!descriptor || descriptor.writable || descriptor.set);
|
|
}
|
|
};
|
|
} else {
|
|
var has = {}.hasOwnProperty;
|
|
var str = {}.toString;
|
|
var proto = {}.constructor.prototype;
|
|
|
|
var ObjectKeys = function (o) {
|
|
var ret = [];
|
|
for (var key in o) {
|
|
if (has.call(o, key)) {
|
|
ret.push(key);
|
|
}
|
|
}
|
|
return ret;
|
|
};
|
|
|
|
var ObjectGetDescriptor = function(o, key) {
|
|
return {value: o[key]};
|
|
};
|
|
|
|
var ObjectDefineProperty = function (o, key, desc) {
|
|
o[key] = desc.value;
|
|
return o;
|
|
};
|
|
|
|
var ObjectFreeze = function (obj) {
|
|
return obj;
|
|
};
|
|
|
|
var ObjectGetPrototypeOf = function (obj) {
|
|
try {
|
|
return Object(obj).constructor.prototype;
|
|
}
|
|
catch (e) {
|
|
return proto;
|
|
}
|
|
};
|
|
|
|
var ArrayIsArray = function (obj) {
|
|
try {
|
|
return str.call(obj) === "[object Array]";
|
|
}
|
|
catch(e) {
|
|
return false;
|
|
}
|
|
};
|
|
|
|
module.exports = {
|
|
isArray: ArrayIsArray,
|
|
keys: ObjectKeys,
|
|
names: ObjectKeys,
|
|
defineProperty: ObjectDefineProperty,
|
|
getDescriptor: ObjectGetDescriptor,
|
|
freeze: ObjectFreeze,
|
|
getPrototypeOf: ObjectGetPrototypeOf,
|
|
isES5: isES5,
|
|
propertyIsWritable: function() {
|
|
return true;
|
|
}
|
|
};
|
|
}
|