docs: function (p, def) {
                  // The prototype should be an instance of Template, that inheriths from BaseTemplate
                  p.$BaseTemplate.constructor.classDefinition.$prototype.$init(p, def);
  
                  // copy the prototype of ITemplate:
                  var itf = ITemplate.prototype;
                  for (var key in itf) {
                      if (itf.hasOwnProperty(key) && !p.hasOwnProperty(key)) {
                          // copy methods which are not already on this object (this avoids copying $classpath and
                          // $destructor)
                          p[key] = itf[key];
                      }
                  }
  
                  // get shortcuts to necessary functions in other classes,
                  // so that templates work even in a sandbox
                  p.$json = require('../utils/Json');
              }