设计问题:javascript中的多态性

设计问题:javascript中的多态性,javascript,Javascript,我试图用javascript设计一个易于扩展的表单系统,但在设计时遇到了一些问题 想象一个网络表单,你可以填写食谱,把它们按一定顺序排列,然后提交给厨师烹饪。然后,假设你有三类食谱:沙拉、开胃菜和主菜。显然,每个表单都有不同数量的字段和不同的表单 我想做的是有一个完整的表单管理器,它本质上接受基类的配方并在上面调用各种东西,比如.saveForm()、.fillForm()或createNewForm(),但我希望这些东西都能在派生类中实现 在Javascript中实现此OO结构的最佳方式是什么

我试图用javascript设计一个易于扩展的表单系统,但在设计时遇到了一些问题

想象一个网络表单,你可以填写食谱,把它们按一定顺序排列,然后提交给厨师烹饪。然后,假设你有三类食谱:沙拉、开胃菜和主菜。显然,每个表单都有不同数量的字段和不同的表单

我想做的是有一个完整的表单管理器,它本质上接受基类的配方并在上面调用各种东西,比如.saveForm()、.fillForm()或createNewForm(),但我希望这些东西都能在派生类中实现


在Javascript中实现此OO结构的最佳方式是什么?或者这不是正确的方法?在编写了一些代码之后,我发现自己分配了自己的类型并不断地进行手动类型检查,但这使得扩展变得更加困难。

下面是我要做的:

var Class = function (Parent, props) {
    var Child, F, i;

    Child = function () {
        if (Child.uber && Child.uber.hasOwnProperty("__construct")) {
            Child.uber.__construct.apply(this, arguments);
        }
        if (Child.prototype.hasOwnProperty("__construct")) {
            Child.prototype.__construct.apply(this, arguments);
        }
    };

    Parent = Parent || Object;
    F = function () {};
    F.prototype = Parent.prototype;
    Child.prototype = new F();
    Child.uber = Parent.prototype;
    Child.prototype.constructor = Child;

    for (i in props) {
        if (props.hasOwnProperty(i)) {
            Child.prototype[i] = props[i];
        }
    }

    return Child;
};

var Recipe = Class(null, {
    __construct: function (name) {
        this.name = name;
    },
    getName: function () {
        return this.name;
    }
});

var Salad = Class(Recipe, {
    __construct: function (name) {
        this.name = name;
    },

    getName: function () {
        var name = Salad.uber.getName.call(this);
        return name;
    }
});
因此,在本例中,我们使用Class函数来伪造一种比javascript中通常可用的更结构化的面向对象方法

我们使用构造函数和示例方法定义Recipe类。然后,我们创建一个sala类,该类继承Recipe类的属性和方法,然后重新定义getName方法。在该方法内部,我们使用静态属性访问该方法的父类实现


如果您想了解更多信息,此代码基于Stoyan Stefanov在“JavaScript模式”中提供的示例。

查看这两篇文章,您将获得如何使用面向对象编程解决业务问题的启发:

如果您需要进一步帮助,请发电子邮件给我们