Javascript "Not a Constructor" Exception while creating objects

I am defining an object like this:

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

    this.currentLayout = '';

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

I then try to create an instance like this:

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

but this exception is thrown:

Project is not a constructor

What could be wrong? I googled around a lot, but I still can't figure out what I am doing wrong.


The code as posted in the question cannot generate that error, because Project is not a user-defined function / valid constructor.

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

You've probably done something like this:

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

Variable declarations using var are hoisted and thus always evaluated before the rest of the code. So, this can also be causing issues:

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
}

An additional cause of this can be ES2015 arrow functions. They cannot be used as constructors.

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

For me it was the differences between import and require on ES6.

E.g.

processor.js

    class Processor {
    
    }
    
    export default Processor

index.js

const Processor = require('./processor');
const processor = new Processor() //fails with the error
    
import Processor from './processor'
const processor = new Processor() // succeed