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.
		
		
		
		
		
			
		
			
				
					43 lines
				
				1.4 KiB
			
		
		
			
		
	
	
					43 lines
				
				1.4 KiB
			| 
											3 years ago
										 | define(['./_setup', './isFunction', './_has'], function (_setup, isFunction, _has) { | ||
|  | 
 | ||
|  |   // Internal helper to create a simple lookup structure.
 | ||
|  |   // `collectNonEnumProps` used to depend on `_.contains`, but this led to
 | ||
|  |   // circular imports. `emulatedSet` is a one-off solution that only works for
 | ||
|  |   // arrays of strings.
 | ||
|  |   function emulatedSet(keys) { | ||
|  |     var hash = {}; | ||
|  |     for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true; | ||
|  |     return { | ||
|  |       contains: function(key) { return hash[key] === true; }, | ||
|  |       push: function(key) { | ||
|  |         hash[key] = true; | ||
|  |         return keys.push(key); | ||
|  |       } | ||
|  |     }; | ||
|  |   } | ||
|  | 
 | ||
|  |   // Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't
 | ||
|  |   // be iterated by `for key in ...` and thus missed. Extends `keys` in place if
 | ||
|  |   // needed.
 | ||
|  |   function collectNonEnumProps(obj, keys) { | ||
|  |     keys = emulatedSet(keys); | ||
|  |     var nonEnumIdx = _setup.nonEnumerableProps.length; | ||
|  |     var constructor = obj.constructor; | ||
|  |     var proto = (isFunction(constructor) && constructor.prototype) || _setup.ObjProto; | ||
|  | 
 | ||
|  |     // Constructor is a special case.
 | ||
|  |     var prop = 'constructor'; | ||
|  |     if (_has(obj, prop) && !keys.contains(prop)) keys.push(prop); | ||
|  | 
 | ||
|  |     while (nonEnumIdx--) { | ||
|  |       prop = _setup.nonEnumerableProps[nonEnumIdx]; | ||
|  |       if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) { | ||
|  |         keys.push(prop); | ||
|  |       } | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   return collectNonEnumProps; | ||
|  | 
 | ||
|  | }); |