• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1var isES5 = (function(){
2    "use strict";
3    return this === undefined;
4})();
5
6if (isES5) {
7    module.exports = {
8        freeze: Object.freeze,
9        defineProperty: Object.defineProperty,
10        getDescriptor: Object.getOwnPropertyDescriptor,
11        keys: Object.keys,
12        names: Object.getOwnPropertyNames,
13        getPrototypeOf: Object.getPrototypeOf,
14        isArray: Array.isArray,
15        isES5: isES5,
16        propertyIsWritable: function(obj, prop) {
17            var descriptor = Object.getOwnPropertyDescriptor(obj, prop);
18            return !!(!descriptor || descriptor.writable || descriptor.set);
19        }
20    };
21} else {
22    var has = {}.hasOwnProperty;
23    var str = {}.toString;
24    var proto = {}.constructor.prototype;
25
26    var ObjectKeys = function (o) {
27        var ret = [];
28        for (var key in o) {
29            if (has.call(o, key)) {
30                ret.push(key);
31            }
32        }
33        return ret;
34    };
35
36    var ObjectGetDescriptor = function(o, key) {
37        return {value: o[key]};
38    };
39
40    var ObjectDefineProperty = function (o, key, desc) {
41        o[key] = desc.value;
42        return o;
43    };
44
45    var ObjectFreeze = function (obj) {
46        return obj;
47    };
48
49    var ObjectGetPrototypeOf = function (obj) {
50        try {
51            return Object(obj).constructor.prototype;
52        }
53        catch (e) {
54            return proto;
55        }
56    };
57
58    var ArrayIsArray = function (obj) {
59        try {
60            return str.call(obj) === "[object Array]";
61        }
62        catch(e) {
63            return false;
64        }
65    };
66
67    module.exports = {
68        isArray: ArrayIsArray,
69        keys: ObjectKeys,
70        names: ObjectKeys,
71        defineProperty: ObjectDefineProperty,
72        getDescriptor: ObjectGetDescriptor,
73        freeze: ObjectFreeze,
74        getPrototypeOf: ObjectGetPrototypeOf,
75        isES5: isES5,
76        propertyIsWritable: function() {
77            return true;
78        }
79    };
80}
81