33 lines
		
	
	
		
			823 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
		
			823 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| var slice = Array.prototype.slice;
 | |
| var isArgs = require('./isArguments');
 | |
| 
 | |
| var origKeys = Object.keys;
 | |
| var keysShim = origKeys ? function keys(o) { return origKeys(o); } : require('./implementation');
 | |
| 
 | |
| var originalKeys = Object.keys;
 | |
| 
 | |
| keysShim.shim = function shimObjectKeys() {
 | |
| 	if (Object.keys) {
 | |
| 		var keysWorksWithArguments = (function () {
 | |
| 			// Safari 5.0 bug
 | |
| 			var args = Object.keys(arguments);
 | |
| 			return args && args.length === arguments.length;
 | |
| 		}(1, 2));
 | |
| 		if (!keysWorksWithArguments) {
 | |
| 			Object.keys = function keys(object) { // eslint-disable-line func-name-matching
 | |
| 				if (isArgs(object)) {
 | |
| 					return originalKeys(slice.call(object));
 | |
| 				}
 | |
| 				return originalKeys(object);
 | |
| 			};
 | |
| 		}
 | |
| 	} else {
 | |
| 		Object.keys = keysShim;
 | |
| 	}
 | |
| 	return Object.keys || keysShim;
 | |
| };
 | |
| 
 | |
| module.exports = keysShim;
 |