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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (14)

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

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

什么可能是错的?我搜索了很多,但仍然无法弄清楚我做错了什么。

提问于
用户回答回答于

发布在问题中的代码无法生成该错误,因为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

变量声明总是在代码的其余部分之前进行评估。所以,这也可能导致问题:

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
}
用户回答回答于

其他原因可能是ES6箭头功能。它们不能用作构造函数。

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

扫码关注云+社区