命名空间方法不是一个函数

时间:2017-04-13 18:26:21

标签: javascript typescript

我有以下类型的脚本,当我尝试调用Player()方法时,我收到错误消息,说它不存在。

  

未捕获的TypeError:GameSmart.User.Player不是函数

namespace GameSmart {
    export class User {
        public Player(): void {
            fetch(Config.domain + '/user/player').then(response => {
                // Do some stuff
            });
        }
    }
}

如果我console.log(GameSmart)我得到一个带有User对象的对象,并且在该对象中它不存在,但是如果我在GameSmart.User.prototype对象中查看它确实显示那里。为什么不在GameSmart.User对象中,我怎么能在那里得到它?

1 个答案:

答案 0 :(得分:1)

您需要创建User的实例才能使用其方法:

let user = new GameSmart.User();
user.Player();

如果您不想要,那么也将类更改为命名空间:

namespace GameSmart {
    export namespace User {
        public Player(): void {
            fetch(Config.domain + '/user/player').then(response => {
                // Do some stuff
            });
        }
    }
}

然后它应该工作:

GameSmart.User.Player();

或者@ DanielA.White在评论中写道,将其静态化:

namespace GameSmart {
    export class User {
        public static Player(): void {
            fetch(Config.domain + '/user/player').then(response => {
                // Do some stuff
            });
        }
    }
}

GameSmart.User.Player();