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.
		
		
		
		
		
			
		
			
				
					
					
						
							78 lines
						
					
					
						
							2.8 KiB
						
					
					
				
			
		
		
	
	
							78 lines
						
					
					
						
							2.8 KiB
						
					
					
				var anObject = require('../internals/an-object'); | 
						|
var defineProperties = require('../internals/object-define-properties'); | 
						|
var enumBugKeys = require('../internals/enum-bug-keys'); | 
						|
var hiddenKeys = require('../internals/hidden-keys'); | 
						|
var html = require('../internals/html'); | 
						|
var documentCreateElement = require('../internals/document-create-element'); | 
						|
var sharedKey = require('../internals/shared-key'); | 
						|
 | 
						|
var GT = '>'; | 
						|
var LT = '<'; | 
						|
var PROTOTYPE = 'prototype'; | 
						|
var SCRIPT = 'script'; | 
						|
var IE_PROTO = sharedKey('IE_PROTO'); | 
						|
 | 
						|
var EmptyConstructor = function () { /* empty */ }; | 
						|
 | 
						|
var scriptTag = function (content) { | 
						|
  return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT; | 
						|
}; | 
						|
 | 
						|
// Create object with fake `null` prototype: use ActiveX Object with cleared prototype | 
						|
var NullProtoObjectViaActiveX = function (activeXDocument) { | 
						|
  activeXDocument.write(scriptTag('')); | 
						|
  activeXDocument.close(); | 
						|
  var temp = activeXDocument.parentWindow.Object; | 
						|
  activeXDocument = null; // avoid memory leak | 
						|
  return temp; | 
						|
}; | 
						|
 | 
						|
// Create object with fake `null` prototype: use iframe Object with cleared prototype | 
						|
var NullProtoObjectViaIFrame = function () { | 
						|
  // Thrash, waste and sodomy: IE GC bug | 
						|
  var iframe = documentCreateElement('iframe'); | 
						|
  var JS = 'java' + SCRIPT + ':'; | 
						|
  var iframeDocument; | 
						|
  iframe.style.display = 'none'; | 
						|
  html.appendChild(iframe); | 
						|
  // https://github.com/zloirock/core-js/issues/475 | 
						|
  iframe.src = String(JS); | 
						|
  iframeDocument = iframe.contentWindow.document; | 
						|
  iframeDocument.open(); | 
						|
  iframeDocument.write(scriptTag('document.F=Object')); | 
						|
  iframeDocument.close(); | 
						|
  return iframeDocument.F; | 
						|
}; | 
						|
 | 
						|
// Check for document.domain and active x support | 
						|
// No need to use active x approach when document.domain is not set | 
						|
// see https://github.com/es-shims/es5-shim/issues/150 | 
						|
// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346 | 
						|
// avoid IE GC bug | 
						|
var activeXDocument; | 
						|
var NullProtoObject = function () { | 
						|
  try { | 
						|
    /* global ActiveXObject */ | 
						|
    activeXDocument = document.domain && new ActiveXObject('htmlfile'); | 
						|
  } catch (error) { /* ignore */ } | 
						|
  NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame(); | 
						|
  var length = enumBugKeys.length; | 
						|
  while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; | 
						|
  return NullProtoObject(); | 
						|
}; | 
						|
 | 
						|
hiddenKeys[IE_PROTO] = true; | 
						|
 | 
						|
// `Object.create` method | 
						|
// https://tc39.github.io/ecma262/#sec-object.create | 
						|
module.exports = Object.create || function create(O, Properties) { | 
						|
  var result; | 
						|
  if (O !== null) { | 
						|
    EmptyConstructor[PROTOTYPE] = anObject(O); | 
						|
    result = new EmptyConstructor(); | 
						|
    EmptyConstructor[PROTOTYPE] = null; | 
						|
    // add "__proto__" for Object.getPrototypeOf polyfill | 
						|
    result[IE_PROTO] = O; | 
						|
  } else result = NullProtoObject(); | 
						|
  return Properties === undefined ? result : defineProperties(result, Properties); | 
						|
};
 | 
						|
 |