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);
| };
| })();
|
|