我正在编写一些客户端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 tabs
,rendering table
,并完成它。
实际发生的事情:控制台显示数千个rendering tabs
直到jsFiddle崩溃。
这表明table.render()
实际上递归地调用tabs.render()
。但为什么?我发现这种行为很令人费解,有人可以解释我的错误在哪里吗?
答案 0 :(得分:1)
你的错误就是你打电话Tabs
的方式:
var tabs = new Tabs();
tabs.render();
Table
:
var table = new Table();
您的问题的原因是this
在没有使用window
运算符调用函数时引用全局对象(new
)。 Tabs
做的第一件事是调用Table
,并设置this.render
。使用new
调用时,每个都有自己的上下文,因此也有自己的render
方法。