Javascript 为什么node.js Buffer.slice不克隆内存?

Javascript 为什么node.js Buffer.slice不克隆内存?,javascript,node.js,Javascript,Node.js,如果Buffer应该扩展Uint8Array,那么为什么下面两段代码会产生不同的结果?这是否违背了继承的概念,即破坏需要Uint8Array对象的代码 const a = new Uint8Array(1); const b = a.slice(); b[0] = 1; console.log(...a); // prints 0 const a = new Buffer(1); const b = a.slice(); b[0] = 1; console.log(...a); // prin

如果
Buffer
应该扩展
Uint8Array
,那么为什么下面两段代码会产生不同的结果?这是否违背了继承的概念,即破坏需要
Uint8Array
对象的代码

const a = new Uint8Array(1);
const b = a.slice();
b[0] = 1;
console.log(...a); // prints 0

const a = new Buffer(1);
const b = a.slice();
b[0] = 1;
console.log(...a); // prints 1

这种行为是:“Buffer实例也是Uint8Array实例。但是,与TypedArray存在微妙的不兼容。例如,虽然ArrayBuffer#slice()创建了切片的副本,但Buffer#slice()的实现在不复制的情况下在现有缓冲区上创建了一个视图,使Buffer#slice()的效率更高。”我发现,也但是,这不意味着不能在需要类型化数组的上下文中安全地使用缓冲区吗?这不是破坏了继承所暗示的那种关系吗?它没有明确说明
Buffer
继承自
Uint8Array
,这是经典的面向对象编程意义上的继承。如果要确保代码按预期运行,可能必须转换为类型化数组,以防止由于这些不兼容而可能出现的问题。