Subclassing Javascript Arrays

在Javascript中,数组(Array)是一种经常使用的数据结构。有时候我们需要对数组进行一些自定义的操作,这时就可以通过继承Array来实现。但是,在继承Array时,会遇到一个常见的错误:TypeError: Array.prototype.toString is not generic。本文将介绍这个错误的原因,并提供解决方案。

什么是“TypeError: Array.prototype.toString is not generic”?

当我们尝试在一个继承了Array的类的实例上调用toString()方法时,可能会看到这个错误。例如:

----- ------- ------- ----- --

----- --- - --- ---------- -- ---
---------------------------- -- ---------- ------------------------ -- --- -------

这个错误的原因是,Array中的toString()方法依赖于this对象是一个标准的Array实例。如果this不是一个标准的Array实例,toString()会抛出一个TypeError错误。

解决方案

要解决这个问题,我们需要重写继承类中的toString()方法,使其能够正确地处理继承数组的实例。下面是一个正确实现toString()的示例代码:

----- ------- ------- ----- -
  ---------- -
    ------ --- - --------------- - ----
  -
-

在这个示例中,我们重写了继承类中的toString()方法,并使用super关键字调用了Array中的join()方法。这样做的好处是,我们可以确保继承类中的join()方法会正确地处理继承数组的实例。

注意,如果我们不重写toString()方法,而是使用Array中的原始toString()方法,我们将不能正确地处理继承数组的实例。这就是为什么我们需要重写这个方法的原因。

示例

下面是一个完整的示例代码,展示了如何继承Array并重写toString()方法:

----- ------- ------- ----- -
  ---------- -
    ------ --- - --------------- - ----
  -
-

----- --- - --- ---------- -- ---
---------------------------- -- -------

在这个示例中,我们定义了一个名为MyArray的类,它继承了Array。然后,我们创建了一个MyArray实例,并在其中添加一些元素。最后,我们打印了这个实例的toString()结果,得到了正确的输出。

结论

在继承Array时,我们可能会遇到TypeError: Array.prototype.toString is not generic错误。要解决这个问题,我们需要重写继承类中的toString()方法,以确保它能够正确地处理继承数组的实例。本文提供了一个示例代码,演示了如何继承Array并重写toString()方法。希望本文对你有所帮助!

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/28622