Q:

Binding a class loses it's static properties

Given
class someClass {
  constructor (str) {
    console.log('created', str);
  }
  static someStatic() {
  }
}

we can do
const someBoundClass = someClass.bind(someClass, 'xxx');
const a = new someBoundClass(); // logs 'created xxx'
console.log(someClass.someStatic) // logs someStatic () {}
console.log(someBoundClass.someStatic) // logs undefined

What's happening behind the scenes causing me to be unable to access static properties on a bound class? Is there any way to achieve the desired bound effect without losing the static methods?

A:

Well bind creates a new function object, so I'm not sure why you would expect it to have the same static properties. Remember that ES6 class is mostly syntactic sugar:
function someClass(str) {
  if (!new.target) throw "constructor must be called with new";
  console.log('created', str);
}
someClass.someStatic = function() {};

var someBoundClass = someClass.bind(null, 'xxx');
console.log(someBoundClass === someClass) // false, of course

As a workaround, you might be able to use subclassing:
class someBoundClass extends someClass { constructor(...args) { super('xxx', ...args); }}
const a = new someBoundClass(); // logs 'created xxx'
console.log(someClass.someStatic) // logs someStatic () {}
console.log(someBoundClass.someStatic) // logs someStatic () {}

The someBoundClass here inherits the static properties from someClass.

