gpt4 book ai didi

javascript - 设计题: Polymorphism in javascript

转载 作者:搜寻专家 更新时间:2023-11-01 04:33:56 24 4
gpt4 key购买 nike

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

想象一个网络表单,您可以在其中填写食谱,将它们按某种顺序排列,然后将它们提交给厨师 cooking 。然后,假设您有 3 类食谱:沙拉、开胃菜和主菜。显然每个表单都会有不同数量的字段和不同的表单。

我想做的是拥有一个总体表单管理器,它基本上接收基类 Recipes 并调用其上的各种东西,例如 .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 类。然后我们创建继承Recipe类的属性和方法的Salad类,然后我们重新定义getName方法。在该方法内部,我们使用静态属性来访问该方法的父类实现。

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

关于javascript - 设计题: Polymorphism in javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5247995/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com