变量中的类工作错误

Class in variable works wrong

本文关键字:工作 错误 变量      更新时间:2023-09-26

我有一个非常复杂的问题:我正在制作一个像linux终端一样工作的应用程序。所以我输入命令,应用程序做点什么。这是我的一个课程:

function _console() {
    this.name = "console";
    this.command_list = {
        "help": function () {
            this.app = function () {
                write("Sorry, no commands so far ;P");
                return this;
            };
            this.help = "type to get help";
            return this;
        }
    };
    this.start = function () {
        write("Hi :)");
    };
    return this;
};

我把这个类放在数组中:

var mainData = {
    openedApps: new Array(new _console()),
};

问题是:首先使用"帮助"功能效果良好。但当我再次输入时,会出现一个错误:

TypeError:对象#的属性"help"不是函数

这就是我执行功能的方式:

mainData.openedApps[0].command_list["help"]().app();

我有另一个类,和这个类非常相似,我把它粘贴在这里,只是我没有把它保存在变量中。我执行它就像:

_global_commands().command_list["command"]().app();

这很好用,所以我认为这是将我的类保持在var中的问题。但我真的不知道我做错了什么。

您有一些特殊之处。首先,为什么每次调用help的方法都要重新声明,而不是只声明一次呢?

有几种方法可以做到这一点。下面的一个解决了您的问题。

"help": function() {
    this.app = this.app || function(){
        write("Sorry, no commands so far ;P");
        return this;
    };
    this.help = this.help || "type to get help";
    return this;
}

此外,您应该考虑在原型上而不是在构造函数内部声明方法。对于您的用例,这可能不会带来可观察到的问题,但结果是您的方法是实例的方法,而不是类的可继承方法。(根据jQuery创始人John Resig进行的一些基准测试,继承也比查找实例更快)。