| 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; |