设计问题:javascript中的多态性
我试图用javascript设计一个易于扩展的表单系统,但在设计时遇到了一些问题 想象一个网络表单,你可以填写食谱,把它们按一定顺序排列,然后提交给厨师烹饪。然后,假设你有三类食谱:沙拉、开胃菜和主菜。显然,每个表单都有不同数量的字段和不同的表单 我想做的是有一个完整的表单管理器,它本质上接受基类的配方并在上面调用各种东西,比如.saveForm()、.fillForm()或createNewForm(),但我希望这些东西都能在派生类中实现设计问题:javascript中的多态性,javascript,Javascript,我试图用javascript设计一个易于扩展的表单系统,但在设计时遇到了一些问题 想象一个网络表单,你可以填写食谱,把它们按一定顺序排列,然后提交给厨师烹饪。然后,假设你有三类食谱:沙拉、开胃菜和主菜。显然,每个表单都有不同数量的字段和不同的表单 我想做的是有一个完整的表单管理器,它本质上接受基类的配方并在上面调用各种东西,比如.saveForm()、.fillForm()或createNewForm(),但我希望这些东西都能在派生类中实现 在Javascript中实现此OO结构的最佳方式是什么
在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模式”中提供的示例。查看这两篇文章,您将获得如何使用面向对象编程解决业务问题的启发: 如果您需要进一步帮助,请发电子邮件给我们