Подкласс Uint8Array в Javascript - PullRequest
1 голос
/ 19 февраля 2020

Я пытаюсь использовать Uint8Array для имитации байта [] или 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], ??????

Я хочу знать, что случилось и как это исправить.

1 Ответ

2 голосов
/ 19 февраля 2020

Это связано с тем, как аргументы интерпретируются перегруженным конструктором.

Это работает правильно:

class bytes extends Uint8Array {
  constructor(...args) {
    super(...args);
  }
}

let b = new bytes(8);
let c = b.subarray(4);
console.log(c);
...