从 HTMLDivElement 创建新的 class 并扩展其原型

create new class from HTMLDivElement and extend its prototype

我正在尝试使用新方法扩展 HTMLDivElement 原型。但是,我不想用我的方法污染 HTMLDivElement 本身,所以我试图创建一个新的 class 来扩展它。

export class ScrollableElement extends HTMLDivElement {
  scrollHorizontal(left: number) {
    this.scrollTo({ left, behavior: 'smooth' });
  }
}

我将此元素用于可滚动 div 的引用。但是,每当我尝试调用此方法时,都会收到错误提示 listRef.scrollHorizontal is not a function.

有什么办法可以实现吗?

我已经成功地使用委托来做到这一点,正如我建议的问题下方的一条评论。

元素class:

export class ScrollableElement {
  private _element: HTMLDivElement | null;

  constructor(element: HTMLDivElement | null) {
    this._element = element;
  }

  scrollHorizontal(left: number) {
    this._element?.scrollTo({ left, behavior: 'smooth' });
  }
}

对 div 的引用赋值:

const [scrollableEl, setScrollableEl] = useState<ScrollableElement | null>(null);

return <div ref={ref => setScrollableEl(new ScrollableElement(ref))} />

function scroll() {
  scrollableEl?.scrollHorizontal(100);
}