【问题标题】:Third level inheritance doesn't work三级继承不起作用
【发布时间】:2016-08-28 15:03:39
【问题描述】:

我在 CoffeeScript 中有几个类,它们继承自另一个类。链条看起来像这样:

  • Page
    • ChooserPage
      • YesNoChooserPage
    • CommentPage
    • SimplePage

这很好用,但是当我尝试向选择器页面链中引入更多级别时,特别是 MultipleYesNoChooserPage extends YesNoChooserPage,突然我收到一个错误:

Uncaught TypeError: Cannot read property 'prototype' of undefined

我检查了类的存在,得到了以下结果:

  • Page 存在
  • ChooserPage 存在
  • YesNoChooserPage 不存在(未定义)
  • MultipleYesNoChooserPage 不存在(显然未定义)

比较: 没有 MultipleYesNoChooserPage 定义:

定义了 MultipleYesNoChooserPage:

CoffeeScript 是否有一些我不知道的最大限制(并且找不到任何东西)或者还有其他原因吗?

类以正确的顺序加载。

【问题讨论】:

  • 听起来很奇怪。有更完整的代码示例吗?
  • MultipleYesNoChooserPage 甚至还没有附加或覆盖功能。它已经简单地因存在而破裂。如果我把它排除在外,一切都会很好。此外,如果我更改 MultipleYesNoChooserPage 以扩展任何其他基于 Page 的类,我不会收到任何错误(当然,我也不会获得任何功能)。
  • 请发布文字,而不是图片。包含导致失败的代码的最小示例。
  • 定义的代码示例将比示例输出更有用。
  • “我似乎无法在项目之外重现这个”,这清楚地表明问题与继承级别无关。

标签: javascript inheritance coffeescript


【解决方案1】:

好的,我得到了解决方案,这是偶然发生的。

在尝试重现这一点时,我注意到它不会在项目之外发生。因为它让我更加困惑(我的意思是,一个类的简单存在怎么会让另一个类消失)我完全删除了该文件并重新创建了它。它奏效了,这让我的困惑上升到了无法理解的程度。然后它打动了我:

为了强制加载文件的顺序,它们被命名为很奇怪。在这种情况下,YesNoChooserPage 和 MultipleYesNoChooserPage 的命名如下:

  • YesNoChooserPage.coffee
  • YZMultipleYesNoChooserPage.coffee

我的编辑器(Sublime Text)按预期顺序列出它们,但我注意到,终端没有。当我重新创建文件时,我不小心将其命名为“YzMultipleYesNoChooserPage”,导致顺序不同。然后就奏效了。

又学到了一件事。

【讨论】:

    猜你喜欢
    • 2012-05-16
    • 1970-01-01
    • 2014-05-31
    • 2018-05-24
    • 2015-03-04
    • 2012-06-04
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多