#

API Docs for: v2.11.1
Show: Inherited Protected Private Deprecated

# File: packages/ember-utils/lib/invoke.js

    import applyStr from './apply-str';

    /**
      Checks to see if the `methodName` exists on the `obj`.

      ```javascript
      let foo = { bar: function() { return 'bar'; }, baz: null };

      Ember.canInvoke(foo, 'bar'); // true
      Ember.canInvoke(foo, 'baz'); // false
      Ember.canInvoke(foo, 'bat'); // false
      ```

      @method canInvoke
      @for Ember
      @param {Object} obj The object to check for the method
      @param {String} methodName The method name to check for
      @return {Boolean}
      @private
    */
    export function canInvoke(obj, methodName) {
      return !!(obj && typeof obj[methodName] === 'function');
    }

    /**
      Checks to see if the `methodName` exists on the `obj`,
      and if it does, invokes it with the arguments passed.

      ```javascript
      let d = new Date('03/15/2013');

      Ember.tryInvoke(d, 'getTime');              // 1363320000000
      Ember.tryInvoke(d, 'setFullYear', [2014]);  // 1394856000000
      Ember.tryInvoke(d, 'noSuchMethod', [2014]); // undefined
      ```

      @method tryInvoke
      @for Ember
      @param {Object} obj The object to check for the method
      @param {String} methodName The method name to check for
      @param {Array} [args] The arguments to pass to the method
      @return {*} the return value of the invoked method or undefined if it cannot be invoked
      @public
    */
    export function tryInvoke(obj, methodName, args) {
      if (canInvoke(obj, methodName)) {
        return args ? applyStr(obj, methodName, args) : applyStr(obj, methodName);
      }
    }