code: function invoke(target, method, args, ignore) {
  
    if (method === undefined) {
      method = target;
      target = undefined;
    }
  
    if ('string' === typeof method) { method = target[method]; }
    if (args && ignore > 0) {
      args = args.length > ignore ? slice.call(args, ignore) : null;
    }
  
    // Unfortunately in some browsers we lose the backtrace if we rethrow the existing error,
    // so in the event that we don't have an `onerror` handler we don't wrap in a try/catch
    if ('function' === typeof Ember.onerror) {
      try {
        // IE8's Function.prototype.apply doesn't accept undefined/null arguments.
        return method.apply(target || this, args || []);
      } catch (error) {
        Ember.onerror(error);
      }
    } else {
      // IE8's Function.prototype.apply doesn't accept undefined/null arguments.
      return method.apply(target || this, args || []);
    }
  }
docs: invokes passed params - normalizing so you can pass target/func, target/string or just func @private