code: function proxyProperty(proto, property, type) {
      let desc = {};
      if (type === 0) {
          desc.value = function(...args) {
              checkNode.call(this);
              return this.node[property].call(this.node, ...args);
          };
      } else if (type > 0) {
          desc.get = function() {
              checkNode.call(this);
              return this.node[property];
          };
          if (type > 1) {
              desc.set = function(val) {
                  checkNode.call(this);
                  return this.node[property] = val;
              };
          }
      }
      Object.defineProperty(proto, property, desc);
  }
docs: Add a proxy property descriptor to a prototype.
  @private
  
  @param {Object} proto The prototype to update.
  @param {String} property The property name to proxy.
  @param {Number} type The property type (0: function, 1: getter, 2: setter).