如何在javascript中动态实例化一个类?

时间:2010-05-03 02:28:28

标签: javascript oop class

我开始使用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';

3 个答案:

答案 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();

希望这有帮助。

相关问题