开发者问题收集

javascript 类型错误“不是构造函数”

2013-06-06
8456

我有几个类用于表示不同类型的表。我将类名放入字典中。我通过键从字典中获取类名,并尝试使用构造函数“new var_with_class_name()”创建类的实例,但出现错误“TypeError:dictionary[model_name] 不是构造函数”。 此代码打包为 require.js 模块。 代码:

define("models", ["jquery", "ui"], function($, ui){

var TimeTableRow = function()
{ /* class methods definitions */ }
var WayTableRow = function()
{ /* ... */ }
var ModelsDictionary = function()
{
   var self = this;
   self.getModel = function(model_name)
   {
      var dictionary = {'time':"TimeTableRow", 'way':"WayTableRow"};
      return new dictionary[model_name]();
   }
}
return new ModelsDictionary();
});

另一个 require.js 模块的使用示例(我跳过所有 requirejs 配置和导入,只显示引发所述错误的代码行): var tableRow = models.getModel(item_type);

1个回答

给定

 var dictionary = {'time':"TimeTableRow", 'way':"WayTableRow"};
 return new dictionary[model_name]();

dictionary[model_name] 求值为 字符串 (或未定义),而 new ("x")() 是无意义的。相反,查找应该求值为 实际 构造函数:

 var dictionary = {'time': TimeTableRow, 'way': WayTableRow};
 return new dictionary[model_name]();

请记住,函数只是 JavaScript 中的对象。

user2246674
2013-06-06