属性undefined TypeScript

时间:2017-08-31 16:49:07

标签: typescript typeerror

执行以下代码时,我得到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之前已实例化。

感谢。

1 个答案:

答案 0 :(得分:0)

处理程序类中的属性undefined错误是由于Polo.instance()方法返回对静态初始化的Polo对象的引用这一事实。在处理程序类中将其设置为私有意味着,对于Handler的每个实例,将声明一个将引用相同静态实例的新私有属性。编译时,这不会引发任何错误。运行时,每次访问this._polo时,都无法引用静态定义的实例,结果是引用undefined。解决方案是将this._polo从private更改为static。