function makeObjectPropertyPusher(valueReader, property, thisArg) {
  return (
    /**
     * @param {Element} node Node.
     * @param {Array<*>} objectStack Object stack.
     * @this {*}
     */
    function (node, objectStack) {
      const value = valueReader.call(thisArg ?? this, node, objectStack);
      if (value !== undefined) {
        const object = /** @type {!Object} */ (
          objectStack[objectStack.length - 1]
        );
        const name = property !== undefined ? property : node.localName;
        let array;
        if (name in object) {
          array = object[name];
        } else {
          array = [];
          object[name] = array;
        }
        array.push(value);
      }
    }
  );
}
Make an object property pusher function for adding a property to the
object at the top of the stack.
@param {function(this: T, Element, Array<*>): *} valueReader Value reader.
@param {string} [property] Property.
@param {T} [thisArg] The object to use as `this` in `valueReader`.
@return {Parser} Parser.
@template T