¿Por qué el comstackdor de cierres de Google falla en mi object ES6 que extiende Date ()?

Tenga en count: esta pregunta se relaciona con el uso del comstackdor de cierre de Google. No se trata directamente de ES6, ya que esa parte está funcionando.

Escribí una class en ES6 que amplía el object Date nativo. Es una class grande, pero esta es una versión simplificada:

class Dative extends Date { constructor (dateData) { super(); super.setTime(Date.parse(dateData)); } addMilliseconds (ms) { super.setTime(super.getTime() + ms); } } 

El código anterior funciona bien en Chrome y Firefox. Sin embargo, cuando lo paso a través de Closure Compiler, arroja errores:

 Uncaught TypeError: Method Date.prototype.setTime called on incompatible receiver [object Object] 

Actualización: la llamada a los methods de date nativos también falla en la versión comstackda pero funciona bien sin comstackr, con un post que dice que este no es un object Date.

Lo que no entiendo es por qué el código que funciona en su forma original se rompe cuando se comstack.

¿Estoy haciendo algo mal, o es esto un error del comstackdor?

Estoy usando la última versión de compiler.jar. Como reference, esto es lo que produce el comstackdor de cierre:

 var $jscomp = { scope: {}, inherits: function(a, b) { function d() {} d.prototype = b.prototype; a.prototype = new d; a.prototype.constructor = a; for (var c in b) if (Object.defineProperties) { var e = Object.getOwnPropertyDescriptor(b, c); e && Object.defineProperty(a, c, e) } else a[c] = b[c] } } , Dative = function(a) { Date.call(this); Date.prototype.setTime.call(this, Date.parse(a)) }; $jscomp.inherits(Dative, Date); Dative.UTC = Date.UTC; Dative.parse = Date.parse; Dative.now = Date.now; Dative.prototype.addMilliseconds = function(a) { Date.prototype.setTime.call(this, Date.prototype.getTime.call(this) + a) }; //# sourceMappingURL=./DativeShort.map 

Date no es subclassable en ES5. Entonces, lo que quieres no es posible en entornos ES5 en primer lugar.

El código transstackdo tampoco puede funcionar en entornos ES6. De la especificación

El constructor de date está diseñado para ser subclassable. Se puede usar como el valor de una cláusula extends de una definición de class. Los constructores de subclass que pretenden henetworkingar el comportamiento de date especificado deben include una súper llamada al constructor de date para crear e inicializar la instancia de subclass con un intervalo interno [[DateValue]].

Sin llamar super no funcionará. Date.call(this); no hace el truco Básicamente, si transpone el código a ES5, la subsorting de types incorporados es un no-go.

Entonces, no, no es un problema de Google Closure.