1 | var anObject = require('../internals/an-object');
|
2 | var defineProperties = require('../internals/object-define-properties');
|
3 | var enumBugKeys = require('../internals/enum-bug-keys');
|
4 | var hiddenKeys = require('../internals/hidden-keys');
|
5 | var html = require('../internals/html');
|
6 | var documentCreateElement = require('../internals/document-create-element');
|
7 | var sharedKey = require('../internals/shared-key');
|
8 | var IE_PROTO = sharedKey('IE_PROTO');
|
9 |
|
10 | var PROTOTYPE = 'prototype';
|
11 | var Empty = function () { };
|
12 |
|
13 |
|
14 | var createDict = function () {
|
15 |
|
16 | var iframe = documentCreateElement('iframe');
|
17 | var length = enumBugKeys.length;
|
18 | var lt = '<';
|
19 | var script = 'script';
|
20 | var gt = '>';
|
21 | var js = 'java' + script + ':';
|
22 | var iframeDocument;
|
23 | iframe.style.display = 'none';
|
24 | html.appendChild(iframe);
|
25 | iframe.src = String(js);
|
26 | iframeDocument = iframe.contentWindow.document;
|
27 | iframeDocument.open();
|
28 | iframeDocument.write(lt + script + gt + 'document.F=Object' + lt + '/' + script + gt);
|
29 | iframeDocument.close();
|
30 | createDict = iframeDocument.F;
|
31 | while (length--) delete createDict[PROTOTYPE][enumBugKeys[length]];
|
32 | return createDict();
|
33 | };
|
34 |
|
35 |
|
36 |
|
37 | module.exports = Object.create || function create(O, Properties) {
|
38 | var result;
|
39 | if (O !== null) {
|
40 | Empty[PROTOTYPE] = anObject(O);
|
41 | result = new Empty();
|
42 | Empty[PROTOTYPE] = null;
|
43 |
|
44 | result[IE_PROTO] = O;
|
45 | } else result = createDict();
|
46 | return Properties === undefined ? result : defineProperties(result, Properties);
|
47 | };
|
48 |
|
49 | hiddenKeys[IE_PROTO] = true;
|