javascript执行错误的功能

时间:2015-05-01 12:01:45

标签: javascript

我正在编写一些客户端Javascript,我想在其中呈现一些标签和表格。这是相关的代码:

(function() {

    var Table = function() {
        this.render = function() {
            console.log('rendering table');
        };
        return this;
    };

    var Tabs = function() {
        var table = Table();
        this.render = function() {
            console.log('rendering tabs');
            table.render();
        };
        return this;
    };

    (function() {
        var tabs = Tabs();
        tabs.render();
    })();

})();

我的期望:控制台应该显示rendering tabsrendering table,并完成它。

实际发生的事情:控制台显示数千个rendering tabs直到jsFiddle崩溃。

这表明table.render()实际上递归地调用tabs.render()。但为什么?我发现这种行为很令人费解,有人可以解释我的错误在哪里吗?

1 个答案:

答案 0 :(得分:1)

你的错误就是你打电话Tabs的方式:

var tabs = new Tabs();
tabs.render();

Table

var table = new Table();

您的问题的原因是this在没有使用window运算符调用函数时引用全局对象(new)。 Tabs做的第一件事是调用Table,并设置this.render。使用new调用时,每个都有自己的上下文,因此也有自己的render方法。