2016-08-01 10 views
7

Mam problem z wystających elementów, gdzie otrzymuję:nie można odczytać właściwość „prototyp” undefined przy przedłużaniu klas

Uncaught TypeError: Cannot read property 'prototype' of undefined

Z tego co czytałem elementy muszą być zdefiniowane w określonej kolejności, więc oto, co robię, ponieważ wygląda na to, że są we właściwej kolejności.

Nie dzieje się to podczas kompilacji, ale w czasie wykonywania w przeglądarce. Kompiluję pliki w jeden plik z browserify i tsify.

Oto mój punkt wejścia main.ts:

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

Następnie wywołuje ten plik GameSmartWeb.ts który odwołuje się do klasy GUI:

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

Następnie klasa GUI apis/GUI.ts wygląda trochę tak:

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

class Rewards extends GUI { 
    // More methods 
} 

Patrząc w przeglądarce mówi błąd jest tutaj:

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 
}); 
+0

Plik 'ts' z klasą' GUI' nie może odwoływać się do klasy 'GameSmartWeb'. udostępnić go poprzez "import". – mukund

Odpowiedz

5

To zdarzyło mi się dzisiaj, choć nie wydaje się być taka sama przyczyna jak dla ciebie. Piszę odpowiedź tak czy inaczej dla innych osób przyjeżdżających tutaj w przyszłości.

miałem pliki skonfigurowane tak:

item.ts:

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

index.ts (aby móc odwoływać się płynnie):

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

other.item.ts:

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

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

I to przyczyną błędu dla mnie:

Cannot read property 'prototype' of undefined

Po zmianie other.item.ts do następujących, to działało:

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

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

Dokładnie to, na co wpadłem. Irytujący..! Dziękuję za napisanie tego. –

2

Kwestia dlatego w moim kompilator, kolejność plików była błędna. Przy zamawianiu plików we właściwej kolejności błąd znika i działa JavaScript.

Więc kolejność kompilator powinien wyglądać następująco:

'GameSmartWeb', 
'GUI' 
3

miałem ten sam problem. W moim przypadku kolejność plików klas w pliku konfiguracyjnym pakietu była tego przyczyną. Miałem plik klasy pochodnej podanej przed klasą podstawową, zmianę kolejności, naprawienie go.

+1

Wow, to była poprawka - to niewiarygodnie frustrujące. – nebffa

0

Dla mnie dziwnie, starałem się rozszerzyć komponent jestem z importowaniem poprzez WebPacka z pakietu node_modules (kątowe-dual-listbox), a kiedy importowany go za pomocą „z«kątowy-Dual-listbox» ", nie udało się z powyższym komunikatem. Kiedy importowałem z "kątowego-podwójnego listbox/indeksu", viola!

Powiązane problemy