Маленькое замечание:
Во-первых, прототипы стандартных объектов дополняются через Object.defineProperty() особенно это важно для прототипа String (Object.keys() ведет себя некорректно после таких дополнений)
Во-вторых, arguments leak лучше не допускать