我像这样定义了一个对象:
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
会出什么问题呢?我用谷歌搜索了很多次,但我仍然不知道我做错了什么。
发布于 2012-04-11 21:50:00
问题中发布的代码无法生成该错误,因为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
的变量声明是hoisted,因此总是在代码的其余部分之前进行计算。因此,这也可能导致问题:
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
}
发布于 2012-04-11 21:51:49
我也用谷歌搜索了一下,找到了这个解决方案:
你在某个地方有一个不是函数的变量Project
。那么new
操作员就会对此抱怨。在您应该将其用作构造器的地方尝试console.log(Project)
,您会找到它。
发布于 2016-10-19 01:43:53
对于我的项目,问题原来是由require()调用创建的循环引用:
y.js:
var x = require("./x.js");
var y = function() { console.log("result is " + x(); }
module.exports = y;
x.js:
var y = require("./y.js");
var my_y = new y(); // <- TypeError: y is not a constructor
var x = function() { console.log("result is " + my_y; }
module.exports = x;
原因是,当它试图初始化y时,它会创建一个临时的"y“对象(不是class,而是object!)在依赖系统中,不知何故它还不是一个构造函数。然后,当x.js完成定义后,它可以继续使y成为构造函数。只是,x.js在尝试使用非构造函数y时会出现错误。
https://stackoverflow.com/questions/10107198
复制相似问题