44 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // Workaround for http://code.google.com/p/v8/issues/detail?id=2804
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| var create = Object.create, shim;
 | |
| 
 | |
| if (!require("./set-prototype-of/is-implemented")()) {
 | |
| 	shim = require("./set-prototype-of/shim");
 | |
| }
 | |
| 
 | |
| module.exports = (function () {
 | |
| 	var nullObject, polyProps, desc;
 | |
| 	if (!shim) return create;
 | |
| 	if (shim.level !== 1) return create;
 | |
| 
 | |
| 	nullObject = {};
 | |
| 	polyProps = {};
 | |
| 	desc = { configurable: false, enumerable: false, writable: true, value: undefined };
 | |
| 	Object.getOwnPropertyNames(Object.prototype).forEach(function (name) {
 | |
| 		if (name === "__proto__") {
 | |
| 			polyProps[name] = {
 | |
| 				configurable: true,
 | |
| 				enumerable: false,
 | |
| 				writable: true,
 | |
| 				value: undefined
 | |
| 			};
 | |
| 			return;
 | |
| 		}
 | |
| 		polyProps[name] = desc;
 | |
| 	});
 | |
| 	Object.defineProperties(nullObject, polyProps);
 | |
| 
 | |
| 	Object.defineProperty(shim, "nullPolyfill", {
 | |
| 		configurable: false,
 | |
| 		enumerable: false,
 | |
| 		writable: false,
 | |
| 		value: nullObject
 | |
| 	});
 | |
| 
 | |
| 	return function (prototype, props) {
 | |
| 		return create(prototype === null ? nullObject : prototype, props);
 | |
| 	};
 | |
| })();
 |