| // 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) |
| var anObject = require('./_an-object'); |
| var dPs = require('./_object-dps'); |
| var enumBugKeys = require('./_enum-bug-keys'); |
| var IE_PROTO = require('./_shared-key')('IE_PROTO'); |
| var Empty = function () { /* empty */ }; |
| var PROTOTYPE = 'prototype'; |
| |
| // Create object with fake `null` prototype: use iframe Object with cleared prototype |
| var createDict = function () { |
| // Thrash, waste and sodomy: IE GC bug |
| var iframe = require('./_dom-create')('iframe'); |
| var i = enumBugKeys.length; |
| var lt = '<'; |
| var gt = '>'; |
| var iframeDocument; |
| iframe.style.display = 'none'; |
| require('./_html').appendChild(iframe); |
| iframe.src = 'javascript:'; // eslint-disable-line no-script-url |
| // createDict = iframe.contentWindow.Object; |
| // html.removeChild(iframe); |
| iframeDocument = iframe.contentWindow.document; |
| iframeDocument.open(); |
| iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt); |
| iframeDocument.close(); |
| createDict = iframeDocument.F; |
| while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]]; |
| return createDict(); |
| }; |
| |
| module.exports = Object.create || function create(O, Properties) { |
| var result; |
| if (O !== null) { |
| Empty[PROTOTYPE] = anObject(O); |
| result = new Empty(); |
| Empty[PROTOTYPE] = null; |
| // add "__proto__" for Object.getPrototypeOf polyfill |
| result[IE_PROTO] = O; |
| } else result = createDict(); |
| return Properties === undefined ? result : dPs(result, Properties); |
| }; |