|  | var isObject = require('./isObject'), | 
|  | isPrototype = require('./_isPrototype'), | 
|  | nativeKeysIn = require('./_nativeKeysIn'); | 
|  |  | 
|  | /** Used for built-in method references. */ | 
|  | var objectProto = Object.prototype; | 
|  |  | 
|  | /** Used to check objects for own properties. */ | 
|  | var hasOwnProperty = objectProto.hasOwnProperty; | 
|  |  | 
|  | /** | 
|  | * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. | 
|  | * | 
|  | * @private | 
|  | * @param {Object} object The object to query. | 
|  | * @returns {Array} Returns the array of property names. | 
|  | */ | 
|  | function baseKeysIn(object) { | 
|  | if (!isObject(object)) { | 
|  | return nativeKeysIn(object); | 
|  | } | 
|  | var isProto = isPrototype(object), | 
|  | result = []; | 
|  |  | 
|  | for (var key in object) { | 
|  | if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { | 
|  | result.push(key); | 
|  | } | 
|  | } | 
|  | return result; | 
|  | } | 
|  |  | 
|  | module.exports = baseKeysIn; |