执行以下代码时,我得到TypeError
:
server.class.ts
import {Handlers} from './handlers.class';
export class Server{
private _hInstance: Handlers;
static _instance: Server;
private constructor(){
this._hInstance = new Handlers();
this._hInstance.mymethod();
}
static instance(): Server{
if(!!!Server._instance){
Server._instance = new Server();
}
return Server._instance;
}
}
handler.class.ts
import { Polo } from './../extapi/polo.class';
export class Handlers{
private _polo: Polo;
constructor(){
this._polo = Polo.instance(); // same as Server.instance()
}
mymethod(){
this._polo.someMethod(); // Error
}
polo类使用相同的技术定义单个实例,并提供静态方法instance()
来返回实例。该代码,单独测试,工作正常。类型错误引发无法读取_polo
的属性undefined
。这实在令人困惑,因为类Polo
已在其实例上调用someMethod
之前已实例化。
感谢。
答案 0 :(得分:0)
处理程序类中的属性undefined错误是由于Polo.instance()方法返回对静态初始化的Polo对象的引用这一事实。在处理程序类中将其设置为私有意味着,对于Handler的每个实例,将声明一个将引用相同静态实例的新私有属性。编译时,这不会引发任何错误。运行时,每次访问this._polo时,都无法引用静态定义的实例,结果是引用undefined。解决方案是将this._polo从private更改为static。