attachParamProperties(target = this, params = this.params) {
    for (const name in params) {
      if (!params.hasOwnProperty(name)) {
        continue
      }

      const param = params[name]

      // handle nested parameter-groups
      if (param instanceof DmxParam || param instanceof PanTiltParam) {
        Object.defineProperty(target, name, {
          enumerable: true,
          get: param.getValue.bind(param, this),
          set: param.setValue.bind(param, this)
        });
      } else {
        this[name] = {}
        this.attachParamProperties(this[name], params[name])
      }
    }
  }
/**
   * Creates dynamic properties for all parameters, using the parameters
   * getValue/setValue-functions as getter and setter.
   * 
   * @param {Object} target - The object to which properties should be attached
   * @param {Object} params - The params for which properties should be assigned
   */
Creates dynamic properties for all parameters, using the parameters
getValue/setValue-functions as getter and setter.

@param {Object} target - The object to which properties should be attached
@param {Object} params - The params for which properties should be assigned
Creates dynamic properties for all parameters using the parameters getValue / setValue - functions as getter and setter . @param { Object } target - The object to which properties should be attached @param { Object } params - The params for which properties should be assigned
attachParamProperties(target = this, params = this.params) {
    for (const name in params) {
      if (!params.hasOwnProperty(name)) {
        continue
      }
      const param = params[name]
      if (param instanceof DmxParam || param instanceof PanTiltParam) {
        Object.defineProperty(target, name, {
          enumerable: true,
          get: param.getValue.bind(param, this),
          set: param.setValue.bind(param, this)
        });
      } else {
        this[name] = {}
        this.attachParamProperties(this[name], params[name])
      }
    }
  }
attachParamProperties ( target = this , params = this . params ) { for ( const name in params ) { if ( ! params . hasOwnProperty ( name ) ) { continue } const param = params [ name ] if ( param instanceof DmxParam || param instanceof PanTiltParam ) { Object . defineProperty ( target , name , { enumerable : true , get : param . getValue . bind ( param , this ) , set : param . setValue . bind ( param , this ) } ) ; } else { this [ name ] = { } this . attachParamProperties ( this [ name ] , params [ name ] ) } } }
Creates dynamic properties for all parameters, using the parameters
 getValue/setValue-functions as getter and setter.
Creates dynamic properties for all parameters using the parameters getValue / setValue - functions as getter and setter .
// handle nested parameter-groups