You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					42 lines
				
				1.5 KiB
			
		
		
			
		
	
	
					42 lines
				
				1.5 KiB
			| 
											3 years ago
										 | // 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); | ||
|  | }; |