Description
In the ES2016 draft specification, TypedArray methods like
%TypedArray%.prototype.subarray()
call out to a constructor for the result
based on the receiver. Ordinarily, the constructor is instance.constructor
,
but subclasses can override this using the Symbol.species
property on the
constructor.
Buffer.prototype.slice
calls out to %TypedArray%.prototype.subarray
, which
calls this calculated constructor with three arguments. The argument pattern
doesn't correspond to a constructor for Buffer, so without setting
Symbol.species appropriately, the wrong kind of result is created.
This issue came up because I'm working on implementing spec-compliant
subclassable TypedArrays in V8. feross helpfully reported that I broke his
buffer library for the browser. I wrote a couple patches to update both Node
and the browser buffer library for ES2016 TypedArray subclassing:
littledan@834338e
littledan/buffer@2e60129
For now (Chrome 49/V8 4.9), I'm keeping the legacy behavior that
%TypedArray%.prototype.subarray
calls out to a base class constructor
like Uint8Array. However, in the future, I'd like to ship proper TypedArray subclassing,
which would benefit from a patch like this. What do you think?