docs: function borrowFromVanilla(params, constructor) {
          // The members borrowed must be interpreted as public
          // This is because they do not use the $binds and maybe calling protected/private members
          // from anonymous functions
  
          var key,
              value,
              opts = { forcePublic: true };
  
          // Grab mixin members
          for (key in params) {
              // Ignore the constructor
              if (/^(_){0,2}initialize$/.test(key)) {
                  continue;
              }
  
              value = params[key];
  
              if (!hasOwn(constructor.prototype, key)) {    // Already defined members are not overwritten
                  if (isFunction(value) && !value[$class] && !value[$interface]) {
                      addMethod(key, value, constructor, opts);
                  } else {
                      addProperty(key, value, constructor, opts);
                  }
              }
          }
  
          constructor[$class].forceUnlocked = true;
      }