docs: function (args) {
    if (false === (this instanceof Interface)) throw new Error('new operator required');
    args = args || {};
    args.name = args.name || '(unnamed)';
    args.description = args.description || 'a REPLInterface';
    args.vendor = args.vendor || null;
    var i;
    var unusedProperties = getInvalidProperties(args, ['name', 'description', 'vendor']);
    var errorList = [];
    for (i = 0; i < unusedProperties.length; i++) errorList.push('invalid property: ' + unusedProperties[i]);
    if (errorList.length > 1)
      throw new Error('error creating Interface: multiple errors');
    if (errorList.length) throw new Error('error creating Interface: ' + errorList[0]);
    // default state
    this.startcallback = null;
    this.stopcallback = null;
    this.mocks = [];
    this.mockPending = false;
    this.navStack = [];
    // args ok, now copy to object
    for (i in args) this[i] = args[i];
  }