首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在javascript中动态实例化一个类?

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

Stack Overflow用户
提问于 2010-05-03 10:28:28
回答 3查看 846关注 0票数 1

我开始学习Javascript中的类,但是遇到了麻烦。我一直在寻找一个教程,它不仅仅是简单地构造一个类(通常是Animal),然后扩展这个类并让一个方法做一些事情(Dog alert('Bark');)。

我已经创建了一个我希望用户能够实例化的类(这是正确的说法吗)?例如,我的程序中的第一个阶段是让用户为类命名,然后开始填充类中的各种变量。当他们做到这一点时,他们可能会再做很多次。

编辑过的完整代码示例:

代码语言:javascript
复制
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:

代码语言:javascript
复制
<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>

在提交时,我需要创建一个新的对象,在伪代码中,类似于:

代码语言:javascript
复制
var *blind_name_from_the_form* = new BlindAluminium();

然后,我希望以后可以这样做:

代码语言:javascript
复制
*blind_name_from_the_form*.subType = '50mm';
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-05-03 11:08:36

也许可以通过将名称存储在另一个对象中?

代码语言:javascript
复制
var instances = {};
instances['theNameTheUserChose'] = new MyObject();
票数 3
EN

Stack Overflow用户

发布于 2010-05-03 11:02:56

简而言之,您将不得不使用eval。如果你想使用一个只有在运行时才知道的名字来调用一个函数(或类),那是没有办法的。

代码语言:javascript
复制
eval("var className = new MyObject();");

话虽如此,您可能需要考虑一些替代方案。人们会给你各种各样的理由,为什么eval是不好的,这些都是真的。但对我来说,沿着这条路走下去将是一件很尴尬的事情。是的,深入到Crockford。

有没有可能使用Javascript的原型继承,而不是尝试使用笨拙的类?考虑到类在Javascript中毫无意义,如果它们不适合这个问题,那么就没有理由使用它们。

票数 4
EN

Stack Overflow用户

发布于 2010-05-03 17:38:41

您总是需要对您的类型进行某种类型的引用。假设您创建了一个构造函数(类),并将其命名为MyObject。如果我没理解错的话,用例是你的用户应该能够做这样的事情:

代码语言:javascript
复制
var userObject = new SomethingElse(); // instead of new MyObject();

这就是编程,所以你总是要明确的。你可以这样做:

代码语言:javascript
复制
var types = {};
types["aType"] = MyObject;
var userObject = new types["aType"];

请注意,即使您像上面这样做,您的用户也必须知道"types“对象的"aType”属性包含什么。你不能真的做这样的事情:

代码语言:javascript
复制
var userObject = guessTheClassName();

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2755841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档