whole_func_string: function base(args, ctor) {
          var plain = false;
  
          // class instance constructor
          function clas() {
              // we can't simply use a plain new clas() here
              // since we might get called unbound from a child class
              // or as a constructor
              // therefore we must use the correct 'this' in that case
              if (this !== global) {
                  plain ? (plain = false) : ctor.apply(this, arguments);
                  return this;
  
              } else {
                  // Case of missing new keyword, a bit hackish but still
                  // better than adding another prototype layer
                  return (plain = true) && clas.apply(new clas(), arguments);
              }
          }
  
          // closures copies of the base properties
          var properties = {};
  
          // constructor for sub classes e.g. Foo.init(barInstance, ...);
          clas.init = bind(ctor);
  
          // extend method of this class, needed to get access to the 'properties'
          // object of other classes
          clas.extend = function(obj) {
              if (is('Function', obj)) {
                  // Extend the class that wants to inherit
                  if (obj.hasOwnProperty('extend')) {
                      return obj.extend(properties);
                  }
  
              } else {
                  for(var i in obj) {
                      if (obj.hasOwnProperty(i)) {
                          extend(clas, properties, obj, i);
                      }
                  }
              }
              return clas;
          };
  
          // Extend and inherit
          var i = is('Function', ctor) && ctor.hasOwnProperty('init') ? 0 : 1;
          for(var l = args.length; i < l; i++) {
              if (is('Object', args[i])) {
                  clas.extend(args[i]);
  
              } else {
                  // We're inheriting, so we need access to the other class's
                  // 'properties' object, therefore, call that class which then
                  // calls the extend method of this class and passes its
                  // 'properties' object
                  args[i].extend(clas);
              }
          }
          return clas;
      }
func_code_string: function base(args, ctor) {
          var plain = false;
  
          // class instance constructor
          function clas() {
              // we can't simply use a plain new clas() here
              // since we might get called unbound from a child class
              // or as a constructor
              // therefore we must use the correct 'this' in that case
              if (this !== global) {
                  plain ? (plain = false) : ctor.apply(this, arguments);
                  return this;
  
              } else {
                  // Case of missing new keyword, a bit hackish but still
                  // better than adding another prototype layer
                  return (plain = true) && clas.apply(new clas(), arguments);
              }
          }
  
          // closures copies of the base properties
          var properties = {};
  
          // constructor for sub classes e.g. Foo.init(barInstance, ...);
          clas.init = bind(ctor);
  
          // extend method of this class, needed to get access to the 'properties'
          // object of other classes
          clas.extend = function(obj) {
              if (is('Function', obj)) {
                  // Extend the class that wants to inherit
                  if (obj.hasOwnProperty('extend')) {
                      return obj.extend(properties);
                  }
  
              } else {
                  for(var i in obj) {
                      if (obj.hasOwnProperty(i)) {
                          extend(clas, properties, obj, i);
                      }
                  }
              }
              return clas;
          };
  
          // Extend and inherit
          var i = is('Function', ctor) && ctor.hasOwnProperty('init') ? 0 : 1;
          for(var l = args.length; i < l; i++) {
              if (is('Object', args[i])) {
                  clas.extend(args[i]);
  
              } else {
                  // We're inheriting, so we need access to the other class's
                  // 'properties' object, therefore, call that class which then
                  // calls the extend method of this class and passes its
                  // 'properties' object
                  args[i].extend(clas);
              }
          }
          return clas;
      }
func_documentation_string: reference to the "unbound" value of this