For example, the spec for CivilTime.plus (which I think should be CivilTime.prototype.plus) checks for NewTarget and passes it to OrdinaryCreateFromConstructor(), but I don't see how that makes sense. NewTarget only exists when creating an object with new, which doesn't seem to be how this method is used.
Is the intention that the method, when called on an object that is an instance of subclass of CivilTime, will return a new instance of the subclass, like Array.prototype.filter does? In that case, it would need to do something more like ArraySpeciesCreate(), and get the constructor off the this value.
I'd suggest not applying species logic here.
As much as i wish we didn鈥檛 have that cowpath, I鈥檓 not sure deviating from a pretty consistently applied subclassing convention is going to fly.
One other thing about species logic: having MyCivilTime.plus() return a new MyCivilTime, but there's no obvious way for MyCivilDateTime.toCivilTime() to return MyCivilTime.
Right, I think we can all agree that static methods should not use the species constructor, and we are just talking about instance methods.
Conclusion:
use species logic for plus/minus and new Target for constructor
Most helpful comment
I'd suggest not applying species logic here.