code: function getAllPropertyDescriptors(object) {
    if (object === Object.prototype) {
      return {};
    } else {
      let prototype = getPrototypeOf(object);
      return assign(getAllPropertyDescriptors(prototype), getOwnPropertyDescriptors(object));
    }
  }
docs: As opposed to `getOwnPropertyDescriptors` which only gets the
  descriptors on a single object, `getAllPropertydescriptors` walks
  the entire prototype chain starting at `prototype` and gather all
  descriptors that are accessible to this object.