web-dev-qa-db-fra.com

Impossible de lire la propriété 'prototype' de indéfinie lors de l'extension de classes

J'ai un problème avec l'extension d'éléments, où je reçois:

Uncaught TypeError: Impossible de lire la propriété 'prototype' de indéfinie

D'après ce que j'ai lu, les éléments doivent être définis dans un ordre particulier. Voici donc ce que je fais, car il me semble qu'ils sont dans le bon ordre.

Cela ne se produit pas au moment de la compilation, mais au moment de l'exécution dans le navigateur. Je compile les fichiers dans un fichier avec browserify et tsify .

Voici mon point d’entrée main.ts:

import GameSmartWeb from './GameSmartWeb';
window.gs = new GameSmartWeb();

Il appelle ensuite ce fichier GameSmartWeb.ts qui fait référence à une classe d'interface graphique:

import GUI from './apis/GUI';
export default class GameSmartWeb {
    public get gui(): GUI { return new GUI(); }
}

Ensuite, la classe d'interface graphique apis/GUI.ts ressemble un peu à ceci:

export default class GUI extends GameSmartWeb {
    public get rewards(): Rewards { return new Rewards(); }
}

class Rewards extends GUI {
    // More methods
}

En regardant dans le navigateur, il est écrit que l'erreur est ici:

var __extends = (this && this.__extends) || function (d, b) {
    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
    function __() { this.constructor = d; }
    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); // The error is on this line
};
var GUI = (function (_super) {
    __extends(GUI, _super); // This is the call to the function
    // more auto generated code
});
8
Get Off My Lawn

C'est ce qui m'est arrivé aujourd'hui, même si cela ne semble pas être la même cause que pour vous. J'écris quand même une réponse pour d'autres personnes venant ici dans le futur.

J'avais mes fichiers mis en place comme ceci:

item.ts :

export class Item {
    myAwesomeFunction() {
        ...
    }
}

index.ts (pour pouvoir référencer facilement):

...
export * from './item';
...

other.item.ts :

import { ..., Item, ... } from './index';

export class OtherItem extends Item ... {
    ...
}

Et cela a causé l'erreur pour moi:

Impossible de lire la propriété 'prototype' de indéfini

Après avoir remplacé other.item.ts par ce qui suit, cela a fonctionné:

import { ... } from './index';
import { Item } from './item';

export class OtherItem extends Item ... {
    ...
}
7
Arg0n

J'ai eu le même problème. Dans mon cas, l'ordre des fichiers de classe dans le fichier de configuration du paquet en était la raison. J'avais le fichier de la classe dérivée spécifié avant celui de la classe de base, changer l'ordre, le fixer.

3
Cristina Tapes

Le problème était dû au fait que dans mon compilateur, l'ordre des fichiers était incorrect. Lorsque vous commandez les fichiers dans le bon ordre, l'erreur disparaît et le JavaScript fonctionne.

Donc, l'ordre dans le compilateur devrait ressembler à ceci:

'GameSmartWeb',
'GUI'
2
Get Off My Lawn

Étrangement, j'essayais d'étendre un composant que j'importais via Webpack à partir d'un paquet node_modules (angular-dual-listbox), et lorsque je l'ai importé à l'aide de l'option "from 'angular-dual-listbox" ", cela a échoué avec le message ci-dessus. Quand j'ai importé de 'angular-dual-listbox/index', alto! 

0
Glenn Bullock