code: function(name, object, methods){
    var isType = (object != Object),
      prototype = object.prototype;
  
    if (isType) object = new Type(name, object);
  
    for (var i = 0, l = methods.length; i < l; i++){
      var key = methods[i],
        generic = object[key],
        proto = prototype[key];
  
      if (generic) generic.protect();
      if (isType && proto) object.implement(key, proto.protect());
    }
  
    if (isType){
      var methodsEnumerable = prototype.propertyIsEnumerable(methods[0]);
      object.forEachMethod = function(fn){
        if (!methodsEnumerable) for (var i = 0, l = methods.length; i < l; i++){
          fn.call(prototype, prototype[methods[i]], methods[i]);
        }
        for (var key in prototype) fn.call(prototype, prototype[key], key)
      };
    }
  
    return force;
  }
docs: Default Types