Javascript “Not a Constructor” 创建对象时的异常

2022-08-30 04:18:43

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

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

可能出了什么问题?我在谷歌上搜索了很多,但我仍然无法弄清楚我做错了什么。


答案 1

问题中发布的代码无法生成该错误,因为不是用户定义的函数/有效的构造函数。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
}

答案 2

造成这种情况的另一个原因可能是ES2015箭头函数它们不能用作构造函数

const f = () => {};
new f(); // This throws "f is not a constructor"