121 votes

Exception Javascript "Not a Constructor" lors de la création d'objets

Je définis un objet comme ceci :

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

    this.currentLayout = '';

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

J'essaie ensuite de créer une instance comme ceci :

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

mais cette exception est levée :

Project is not a constructor

Qu'est-ce qui pourrait ne pas aller ? J'ai beaucoup cherché sur Internet, mais je n'arrive toujours pas à comprendre ce que je fais de mal.

1 votes

Par curiosité, quel navigateur donne ce message "Project is not a constructor" ?

18 votes

En tant que nœud latéral sans rapport, les directives générales de style JavaScript recommandent de commencer un identifiant de variable par une lettre majuscule uniquement s'il s'agit d'un constructeur : "Project" est correct, mais la majuscule de début dans "ProjectHeight" me suggère qu'il devrait également être un constructeur. Si vous utilisez "projectHeight" à la place, votre code sera plus lisible pour les autres. (En fait, si les autres posters ont raison, et que vous avez défini une variable Project ailleurs, l'utilisation de la règle de la majuscule initiale pour les constructeurs uniquement vous évitera de refaire cette erreur).

0 votes

@DaggNabbit Opera le fait (12.15)

15voto

J'ai une classe dans un fichier que j'importe dans un fichier de test :

//Vec.js
class Vec {

}

module.exports.Vec = Vec;

Changer

//Vec.test.js
const Vec = require('./Vec');
const myVec = new Vec(); //TypeError: Vec is not a constructor

à

//Vec.test.js
const {Vec} = require('./Vec');
const myVec = new Vec(); //Succeeds!

a résolu cette erreur pour moi.

12voto

Jiten Points 137

Dans mon cas, j'utilisais le nom du prototype comme nom d'objet. Par exemple

function proto1()
{}

var proto1 = new proto1();

C'était une erreur stupide mais qui pourrait être utile à quelqu'un comme moi ;)

6voto

alex351 Points 328

Parfois, il s'agit simplement de la façon dont vous l'exportez et l'importez. Pour ce message d'erreur, il se peut que le fichier par défaut est manquant.

export default SampleClass {}

Où vous l'instanciez :

import SampleClass from 'path/to/class';
let sampleClass = new SampleClass();

Option 2, avec des accolades :

export SampleClass {}
import { SampleClass } from 'path/to/class';
let sampleClass = new SampleClass();

4voto

Glenn Mohammad Points 126

Pour compléter la réponse de @wprl, le raccourci de méthode objet ES6, comme les fonctions flèches, ne peut pas non plus être utilisé comme constructeur.

4voto

Car.js

class Car {
 getName() {return 'car'};
}
export default Car;

TestFile.js

const object = require('./Car.js');
const instance = new object();

erreur : TypeError : instance n'est pas un constructeur

impression du contenu de l'objet

object = {default: Car}

ajouter default à la fonction require et cela fonctionnera comme contructor

const object = require('object-fit-images').default;
const instance = new object();
instance.getName();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X