创建对象时出现Javascript“不是构造函数”异常

新手上路,请多包涵

我正在定义一个这样的对象:

 function Project(Attributes, ProjectWidth, ProjectHeight) {
 this.ProjectHeight = ProjectHeight;
 this.ProjectWidth = ProjectWidth;
 this.ProjectScale = this.GetProjectScale();
 this.Attributes = Attributes;

 this.currentLayout = '';

 this.CreateLayoutArray = function()
 {....}
 }

然后我尝试创建一个这样的实例:

 var newProj = new Project(a,b,c);

但是抛出了这个异常:

 Project is not a constructor

有什么问题?我用谷歌搜索了很多,但我仍然无法弄清楚我做错了什么。

原文由 unni 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 676
2 个回答

问题中发布的代码无法生成该错误,因为 Project 不是用户定义的函数/有效的构造函数。

 function x(a,b,c){}
 new x(1,2,3); // produces no errors

你可能做过这样的事情:

 function Project(a,b,c) {}
 Project = {}; // or possibly Project = new Project
 new Project(1,2,3); // -> TypeError: Project is not a constructor

使用 var 的变量声明被 提升,因此总是在其余代码之前进行评估。因此,这也可能导致问题:

 function Project(){}
 function localTest() {
 new Project(1,2,3); // `Project` points to the local variable,
 // not the global constructor!

 //...some noise, causing you to forget that the `Project` constructor was used
 var Project = 1; // Evaluated first
 }

原文由 Rob W 发布,翻译遵循 CC BY-SA 4.0 许可协议

就我而言,这是由于两个类之间的循环引用而发生的。我在 A 类文件中导入了 B 类,在 B 类文件中导入了 A 类,所以程序从来没有达到实际将 A 定义为类的地步。

原文由 León Mora 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题