我遇到了扩展项目的问题,我得到了:
未捕获的TypeError:无法读取属性'原型'未定义的
从我所看到的内容中,需要按特定顺序定义项目,所以这就是我正在做的事情,因为看起来它们的顺序正确。
这不会在编译时发生,而是在运行时在浏览器中发生。我正在使用browserify和tsify将文件编译为一个文件。
这是我的切入点 main.ts :
import GameSmartWeb from './GameSmartWeb';
window.gs = new GameSmartWeb();
然后调用此文件 GameSmartWeb.ts 引用GUI类:
import GUI from './apis/GUI';
export default class GameSmartWeb {
public get gui(): GUI { return new GUI(); }
}
然后GUI类 apis / GUI.ts 看起来有点像这样:
export default class GUI extends GameSmartWeb {
public get rewards(): Rewards { return new Rewards(); }
}
class Rewards extends GUI {
// More methods
}
在浏览器中查看错误时:
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 :(得分:7)
今天发生在我身上,虽然它似乎与你没有相同的原因。无论如何,我正在为将来来这里的其他人写一个答案。
我的文件设置如下:
<强> item.ts 强>:
export class Item {
myAwesomeFunction() {
...
}
}
index.ts (能够顺利引用):
...
export * from './item';
...
<强> other.item.ts 强>:
import { ..., Item, ... } from './index';
export class OtherItem extends Item ... {
...
}
这导致了我的错误:
无法读取未定义的属性'prototype'
将 other.item.ts 更改为以下内容后,工作正常:
import { ... } from './index';
import { Item } from './item';
export class OtherItem extends Item ... {
...
}
答案 1 :(得分:3)
我有同样的问题。在我的例子中,bundle配置文件中的类文件的顺序就是它的原因。我在基类之前指定了派生类的文件,切换顺序,修复它。
答案 2 :(得分:2)
问题是因为在我的编译器中,文件的顺序是错误的。以正确的顺序排序文件时,错误就会消失,JavaScript也会起作用。
因此,编译器中的顺序应如下所示:
'GameSmartWeb',
'GUI'
答案 3 :(得分:0)
对我来说,奇怪的是,我试图通过node_modules包(angular-dual-listbox)扩展我通过webpack导入的组件,当我使用“from'angle-dual-listbox'”导入它时,它失败了以上的消息。当我从'angular-dual-listbox / index'导入时,中提琴!
答案 4 :(得分:0)
就我而言,我正在使用browserify。
因此,当我导入bundle.js时,app.js的文件路径会有所不同,然后从client.js加载(因为我正在对client.js进行更改,然后将其转换为bundle.js)
答案 5 :(得分:0)
我的原因是没有在其中一个类中调用super()。您可以检查每个构造函数是否调用了super。