heyujie
2021-05-24 4885600ecc369aa2e30a65de8dd7a410f13c34df
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// Workaround for http://code.google.com/p/v8/issues/detail?id=2804
 
"use strict";
 
var create = Object.create, shim;
 
if (!require("./set-prototype-of/is-implemented")()) {
    shim = require("./set-prototype-of/shim");
}
 
module.exports = (function () {
    var nullObject, polyProps, desc;
    if (!shim) return create;
    if (shim.level !== 1) return create;
 
    nullObject = {};
    polyProps = {};
    desc = { configurable: false, enumerable: false, writable: true, value: undefined };
    Object.getOwnPropertyNames(Object.prototype).forEach(function (name) {
        if (name === "__proto__") {
            polyProps[name] = {
                configurable: true,
                enumerable: false,
                writable: true,
                value: undefined
            };
            return;
        }
        polyProps[name] = desc;
    });
    Object.defineProperties(nullObject, polyProps);
 
    Object.defineProperty(shim, "nullPolyfill", {
        configurable: false,
        enumerable: false,
        writable: false,
        value: nullObject
    });
 
    return function (prototype, props) {
        return create(prototype === null ? nullObject : prototype, props);
    };
})();