1// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) 2var anObject = require('./_an-object'); 3var dPs = require('./_object-dps'); 4var enumBugKeys = require('./_enum-bug-keys'); 5var IE_PROTO = require('./_shared-key')('IE_PROTO'); 6var Empty = function () { /* empty */ }; 7var PROTOTYPE = 'prototype'; 8 9// Create object with fake `null` prototype: use iframe Object with cleared prototype 10var createDict = function () { 11 // Thrash, waste and sodomy: IE GC bug 12 var iframe = require('./_dom-create')('iframe'); 13 var i = enumBugKeys.length; 14 var lt = '<'; 15 var gt = '>'; 16 var iframeDocument; 17 iframe.style.display = 'none'; 18 require('./_html').appendChild(iframe); 19 iframe.src = 'javascript:'; // eslint-disable-line no-script-url 20 // createDict = iframe.contentWindow.Object; 21 // html.removeChild(iframe); 22 iframeDocument = iframe.contentWindow.document; 23 iframeDocument.open(); 24 iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt); 25 iframeDocument.close(); 26 createDict = iframeDocument.F; 27 while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]]; 28 return createDict(); 29}; 30 31module.exports = Object.create || function create(O, Properties) { 32 var result; 33 if (O !== null) { 34 Empty[PROTOTYPE] = anObject(O); 35 result = new Empty(); 36 Empty[PROTOTYPE] = null; 37 // add "__proto__" for Object.getPrototypeOf polyfill 38 result[IE_PROTO] = O; 39 } else result = createDict(); 40 return Properties === undefined ? result : dPs(result, Properties); 41}; 42