function result(object, key, defaultValue) {
      var value = object == null ? undefined : object[key];
      if (typeof value == 'undefined') {
        return defaultValue;
      }
      return isFunction(value) ? object[key]() : value;
    }
Resolves the value of property `key` on `object`. If `key` is a function
it is invoked with the `this` binding of `object` and its result returned,
else the property value is returned. If `object` is `null` or `undefined`
then `undefined` is returned. If a default value is provided it is returned
if the property value resolves to `undefined`.

@static
@memberOf _
@category Utility
@param {Object} object The object to inspect.
@param {string} key The name of the property to resolve.
@param {*} [defaultValue] The value returned if the property value
 resolves to `undefined`.
@returns {*} Returns the resolved value.
@example

var object = {
  'user': 'fred',
  'age': function() {
    return 40;
  }
};

_.result(object, 'user');
// => 'fred'

_.result(object, 'age');
// => 40

_.result(object, 'status', 'busy');
// => 'busy'