|  | var constant = require('./constant'), | 
|  | createInverter = require('./_createInverter'), | 
|  | identity = require('./identity'); | 
|  |  | 
|  | /** Used for built-in method references. */ | 
|  | var objectProto = Object.prototype; | 
|  |  | 
|  | /** | 
|  | * Used to resolve the | 
|  | * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) | 
|  | * of values. | 
|  | */ | 
|  | var nativeObjectToString = objectProto.toString; | 
|  |  | 
|  | /** | 
|  | * Creates an object composed of the inverted keys and values of `object`. | 
|  | * If `object` contains duplicate values, subsequent values overwrite | 
|  | * property assignments of previous values. | 
|  | * | 
|  | * @static | 
|  | * @memberOf _ | 
|  | * @since 0.7.0 | 
|  | * @category Object | 
|  | * @param {Object} object The object to invert. | 
|  | * @returns {Object} Returns the new inverted object. | 
|  | * @example | 
|  | * | 
|  | * var object = { 'a': 1, 'b': 2, 'c': 1 }; | 
|  | * | 
|  | * _.invert(object); | 
|  | * // => { '1': 'c', '2': 'b' } | 
|  | */ | 
|  | var invert = createInverter(function(result, value, key) { | 
|  | if (value != null && | 
|  | typeof value.toString != 'function') { | 
|  | value = nativeObjectToString.call(value); | 
|  | } | 
|  |  | 
|  | result[value] = key; | 
|  | }, constant(identity)); | 
|  |  | 
|  | module.exports = invert; |