变量中的类工作错误

时间:2013-09-01 11:46:33

标签: javascript

我有一个非常复杂的问题:我正在制作像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中是个问题。但我真的不知道我做错了什么。

1 个答案:

答案 0 :(得分:1)

你有一些特点。首先,为什么每次调用时都重新调用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所做的一些基准测试,继承也比查看实例更快。)