code: function(properties, superPrototype) {
  		// Use this instance's prototype if no prototype provided
  		superPrototype = superPrototype || this.constructor && this.constructor.prototype;
  		
  		// Copy the properties onto the new prototype
  		for (var name in properties) {
  			var value = properties[name];
  
  			// Never mix construct or destruct
  			if (name === 'construct' || name === 'destruct')
  				continue;
  
  			// Check if the property if a method that makes use of _super:
  			// 1. The value should be a function
  			// 2. The super prototype should have a function by the same name
  			// 3. The function should use this._super somewhere
  			var usesSuper = superPrototype && typeof value === 'function' && typeof superPrototype[name] === 'function' && superTest.test(value);
  
  			if (usesSuper) {
  				// Wrap the function such that this._super will be available
  				if (this.hasOwnProperty(name)) {
  					// Properties that exist directly on the object should be superified statically
  					this[name] = superifyStatic(name, value, this);
  				}
  				else {
  					// Properties that are part of the superPrototype should be superified dynamically
  					this[name] = superifyDynamic(name, value, superPrototype);
  				}
  			}
  			else {
  				// Directly assign the property
  				this[name] = value;
  			}
  		}
  	}
docs: Mix the provided properties into the current context with the ability to call overridden methods with _super()