function makeFunc(length, fn) {
        switch (length) {
          case 1:
            return function wrap1(a) {
              return fn(this, arguments, this instanceof wrap1);
            };
          case 2:
            return function wrap2(a, b) {
              return fn(this, arguments, this instanceof wrap2);
            };
          case 3:
            return function wrap3(a, b, c) {
              return fn(this, arguments, this instanceof wrap3);
            };
          case 4:
            return function wrap4(a, b, c, d) {
              return fn(this, arguments, this instanceof wrap4);
            };
          case 5:
            return function wrap5(a, b, c, d, e) {
              return fn(this, arguments, this instanceof wrap5);
            };
          case 6:
            return function wrap6(a, b, c, d, e, f) {
              return fn(this, arguments, this instanceof wrap6);
            };
          case 7:
            return function wrap7(a, b, c, d, e, f, g) {
              return fn(this, arguments, this instanceof wrap7);
            };
          case 8:
            return function wrap8(a, b, c, d, e, f, g, h) {
              return fn(this, arguments, this instanceof wrap8);
            };
          case 9:
            return function wrap9(a, b, c, d, e, f, g, h, i) {
              return fn(this, arguments, this instanceof wrap9);
            };
          default:
            return function wrap() {
              return fn(this, arguments, this instanceof wrap);
            };
        }
      }
@name Spy.callData
@property {object} object - `this` context for the invocation.
@property {number} invocationOrder - Order of the invocation.
@property {Array} args - The arguments passed for this invocation.
@property returnValue - The value that was returned from this invocation.