在 Javascript 中子类化 Uint8Array
Subclassing Uint8Array in Javascript
我尝试使用 Uint8Array 来模拟 byte[] 或 uint8[]。
TypedArray.subarray 在现有缓冲区上创建新视图,对新对象内容的更改将影响原始对象,反之亦然。
我总是这样使用它:
let u = new Uint8Array(8) //'u' is 8 bytes
let a = u.subarray(4) //'a' is 4 bytes
console.log(a) // show [0,0,0,0], it is ok
但是当我尝试子类化 Uint8Array 时,子数组变得奇怪。
class bytes extends Uint8Array {
constructor(arg) {
super(arg)
}
}
let b = new bytes(8) //'b' is 8 bytes
let c = b.subarray(4) //'c' should be 4 bytes, but is 8 bytes
console.log(c) // show [0,0,0,0,0,0,0,0], ??????
我想知道发生了什么以及如何解决它。
它与重载构造函数如何解释参数有关。
这可以正常工作:
class bytes extends Uint8Array {
constructor(...args) {
super(...args);
}
}
let b = new bytes(8);
let c = b.subarray(4);
console.log(c);
我尝试使用 Uint8Array 来模拟 byte[] 或 uint8[]。
TypedArray.subarray 在现有缓冲区上创建新视图,对新对象内容的更改将影响原始对象,反之亦然。
我总是这样使用它:
let u = new Uint8Array(8) //'u' is 8 bytes
let a = u.subarray(4) //'a' is 4 bytes
console.log(a) // show [0,0,0,0], it is ok
但是当我尝试子类化 Uint8Array 时,子数组变得奇怪。
class bytes extends Uint8Array {
constructor(arg) {
super(arg)
}
}
let b = new bytes(8) //'b' is 8 bytes
let c = b.subarray(4) //'c' should be 4 bytes, but is 8 bytes
console.log(c) // show [0,0,0,0,0,0,0,0], ??????
我想知道发生了什么以及如何解决它。
它与重载构造函数如何解释参数有关。
这可以正常工作:
class bytes extends Uint8Array {
constructor(...args) {
super(...args);
}
}
let b = new bytes(8);
let c = b.subarray(4);
console.log(c);