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