我开始使用Javascript中的课程并且遇到了障碍。我一直在寻找一个比简单如何构建一个类(通常是Animal)然后扩展类并让Method做某事(Dog alert('Bark');)的教程。
我创建了一个我希望用户能够实例化的类(是正确的单词)吗?例如,我的程序的第一个阶段是让用户给类命名,然后开始填充类中的各种变量。当他们这样做时,他们可能会再次这样做。
编辑,完整的代码示例:
function Blind() {
this.Type = null;
this.Colour = null;
this.Width = 500;
this.Drop = 500;
this.Price = 0;
}
function BlindAluminium() {
Blind.call(this);
this.Type = 'aluminium';
this.SubType = null;
this.StackHeight = 0;
}
这是定义对象的代码。
以下是允许用户定义新对象的HTML:
<form id="create_blind_form" name="create_blind_form" method="post" action="">
<label for="blind_name">Blind Name: <input name="blind_name" id="blind_name" type="text" /></label>
<input name="submit" type="submit" value="Submit" />
</form>
提交我需要创建一个新对象,用伪代码,如下所示:
var *blind_name_from_the_form* = new BlindAluminium();
然后我希望这样做:
*blind_name_from_the_form*.subType = '50mm';
答案 0 :(得分:4)
简短的回答是你将不得不使用eval
。如果你想调用一个只在运行时知道名字的函数(或类),那就没办法了。
eval("var className = new MyObject();");
话虽这么说,你可能想考虑一些替代方案。人们会告诉你为什么eval是坏的各种原因,这是真的。但对我来说,沿着这条路走下去只是尴尬的管理。是的,深入Crockford。
是否可以使用Javascript的原型继承,而不是尝试使用笨拙的类?鉴于Javascript中的类没有任何意义,如果它们不适合问题,则没有理由使用它们。
答案 1 :(得分:3)
也许将名称存储在另一个对象中?
var instances = {};
instances['theNameTheUserChose'] = new MyObject();
答案 2 :(得分:1)
您总是需要对您的类型进行某种引用。让我们假设您创建一个构造函数(类)并将其命名为MyObject。如果我理解你的用例是用户应该能够做这样的事情:
var userObject = new SomethingElse(); // instead of new MyObject();
这是编程,所以你总是必须明确。你可以这样做:
var types = {};
types["aType"] = MyObject;
var userObject = new types["aType"];
请注意,即使您喜欢上述内容,您的用户也必须知道“types”对象的“aType”属性包含的内容。你真的不能做这样的事情:
var userObject = guessTheClassName();
希望这有帮助。