我开始学习Javascript中的类,但是遇到了麻烦。我一直在寻找一个教程,它不仅仅是简单地构造一个类(通常是Animal),然后扩展这个类并让一个方法做一些事情(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';发布于 2010-05-03 11:08:36
也许可以通过将名称存储在另一个对象中?
var instances = {};
instances['theNameTheUserChose'] = new MyObject();发布于 2010-05-03 11:02:56
简而言之,您将不得不使用eval。如果你想使用一个只有在运行时才知道的名字来调用一个函数(或类),那是没有办法的。
eval("var className = new MyObject();");话虽如此,您可能需要考虑一些替代方案。人们会给你各种各样的理由,为什么eval是不好的,这些都是真的。但对我来说,沿着这条路走下去将是一件很尴尬的事情。是的,深入到Crockford。
有没有可能使用Javascript的原型继承,而不是尝试使用笨拙的类?考虑到类在Javascript中毫无意义,如果它们不适合这个问题,那么就没有理由使用它们。
发布于 2010-05-03 17:38:41
您总是需要对您的类型进行某种类型的引用。假设您创建了一个构造函数(类),并将其命名为MyObject。如果我没理解错的话,用例是你的用户应该能够做这样的事情:
var userObject = new SomethingElse(); // instead of new MyObject();这就是编程,所以你总是要明确的。你可以这样做:
var types = {};
types["aType"] = MyObject;
var userObject = new types["aType"];请注意,即使您像上面这样做,您的用户也必须知道"types“对象的"aType”属性包含什么。你不能真的做这样的事情:
var userObject = guessTheClassName();希望这能有所帮助。
https://stackoverflow.com/questions/2755841
复制相似问题