code: function Assertion (obj, msg, ssfi, lockSsfi) {
      flag(this, 'ssfi', ssfi || Assertion);
      flag(this, 'lockSsfi', lockSsfi);
      flag(this, 'object', obj);
      flag(this, 'message', msg);
  
      return util.proxify(this);
    }
docs: /*!
  Assertion Constructor
  
  Creates object for chaining.
  
  `Assertion` objects contain metadata in the form of flags. Three flags can
  be assigned during instantiation by passing arguments to this constructor:
  
  - `object`: This flag contains the target of the assertion. For example, in
  the assertion `expect(numKittens).to.equal(7);`, the `object` flag will
  contain `numKittens` so that the `equal` assertion can reference it when
  needed.
  
  - `message`: This flag contains an optional custom error message to be
  prepended to the error message that's generated by the assertion when it
  fails.
  
  - `ssfi`: This flag stands for "start stack function indicator". It
  contains a function reference that serves as the starting point for
  removing frames from the stack trace of the error that's created by the
  assertion when it fails. The goal is to provide a cleaner stack trace to
  end users by removing Chai's internal functions. Note that it only works
  in environments that support `Error.captureStackTrace`, and only when
  `Chai.config.includeStack` hasn't been set to `false`.
  
  - `lockSsfi`: This flag controls whether or not the given `ssfi` flag
  should retain its current value, even as assertions are chained off of
  this object. This is usually set to `true` when creating a new assertion
  from within another assertion. It's also temporarily set to `true` before
  an overwritten assertion gets called by the overwriting assertion.
  
  @param {Mixed} obj target of the assertion
  @param {String} msg (optional) custom error message
  @param {Function} ssfi (optional) starting point for removing stack frames
  @param {Boolean} lockSsfi (optional) whether or not the ssfi flag is locked
  @api private