【问题标题】:Inheritance in JavascriptJavascript中的继承
【发布时间】:2011-01-02 21:15:54
【问题描述】:

我正在研究一个简单的问题来表示一些具有层次结构的类型。有一个数据行包含一些数据,数据可能因行的类型而异。简单的行可能只有标题和日期,而扩展的行可能包含标题、描述、日期和图像。我对 Javascript 并不陌生,但对它的理解还不够好,无法继续前进。举一个简化的例子,下面是我用 Java 编写它的方式:

interface Row {
    View getView();
}

class BasicRow implements Row {
    private String title;
    private String description;

    public BasicRow(String title, String description) {
        this.title = title;
        this.description = description;
    }

    public View getView() {
        // return a View object with title and description
    }
}

class ExtendedRow implements Row {
    private String title;
    private String description;
    private Date date;
    private Image image;

    public ExtendedRow(String title, String description, Date date, Image image) {
        this.title = title;
        this.description = description;
        this.date = date;
        this.image = image;
    }

    public View getView() {
        // return a View object with title
        // description, date, and image
    }
}

这里可以进行的 OO 改进很少,例如从 BasicRow 扩展 ExtendedRow 并仅定义新字段并覆盖 getView 方法。

Javascript 没有接口或抽象类,恐怕我还没有深入到原型意义上的思考。那么我该如何在 Javascript 中实现与上面示例一样基本的东西,其中有一个基类或接口,以及从该基类扩展的两个类,每个类都有自己的特定行为。

非常感谢任何指针。

【问题讨论】:

    标签: javascript inheritance oop prototype interface


    【解决方案1】:

    看看John Resig's article on inheritance in Javascript。 Resig 的作品和 Mootools.classMootools 库的一部分)都是 Dean Edward 的 Base.js 的衍生作品

    希望对您有所帮助。

    【讨论】:

    • 感谢您的链接。我真的很喜欢 MooTools Class 和 API 设计,现在阅读这篇相当长的文章 jqueryvsmootools.com 来决定是否在我的项目中使用 MooTools 而不是 jQuery。
    • 我认为试图将 JavaScript 强制为经典的 OO 模式是错误的。我更喜欢 Crockford 拥抱 JS 的特性。
    【解决方案2】:

    看看 Douglas Crockford 的文章:

    道格拉斯·克罗克福德是一名大四学生 Yahoo! 的 JavaScript 架构师他是 以他在介绍方面的工作而闻名 JavaScript 对象表示法 (JSON) - Wikipedia

    这些文章是必读的,我相信它们会帮助你弄清楚如何构建你的对象。

    【讨论】:

    • 这些确实是很棒的读物。它确实需要在思想上发生重大转变,我想我会整天研究小细节,但这些链接确实帮助消除了很多疑虑
    • 很高兴它为您服务。第一次阅读这三篇文章时,我的经历大致相同:)
    【解决方案3】:

    “Javascript 没有接口或抽象类,恐怕我还没有深入到原型意义上的思考。”

    您不需要无类型语言的接口。接口只允许编译器确保对象具有某些功能,以便它可以进行类型检查。使用 Javascript,您只需调用您想要的方法并希望(好吧,确保您自己……js 不会帮助您)您调用它的对象具有该功能。

    【讨论】:

      猜你喜欢
      • 2013-03-28
      • 1970-01-01
      • 2013-11-07
      • 2021-01-07
      • 1970-01-01
      • 1970-01-01
      • 2010-10-30
      • 1970-01-01
      相关资源
      最近更新 更多