JavaScript范围混淆
我对小报的定义如下:JavaScript范围混淆,javascript,scope,Javascript,Scope,我对小报的定义如下: MyApp.TabList = function (selector) { var private = { $list: $(selector), tabs: [] }; this.add = function (tab) { private.tabs.push(tab); }; }; 但是,当我调用this并打断this.add的主体时,private不会出现在本地范围中: MyApp.
MyApp.TabList = function (selector) {
var private = {
$list: $(selector),
tabs: []
};
this.add = function (tab) {
private.tabs.push(tab);
};
};
但是,当我调用this并打断this.add
的主体时,private
不会出现在本地范围中:
MyApp.tabs = new MyApp.TabList("#tabs");
$("#tab-add").click(function() {
MyApp.tabs.add(new MyApp.Tab("title"));
});
private
是否不保留在对象内部
如果这段代码像上面那样独立运行,我可能会错过一些东西——为了演示的目的,我尽可能简单地使用它。由于closure属性,该变量在add()函数中肯定是可用的
这可能不是答案,但
private
是一个Javascript关键字。您应该尽量避免使用它作为变量的名称。它会导致出现未知的bug,有时调试器也帮不上忙。试一试,让我们知道它是否有效 @Agile通常您希望以结束构造函数,并返回此值代码>。我不认为这有什么区别,但这是一个很好的实践(据我所知)。@Agileprivate
变量不应该在add
函数的局部范围内-它在它的外部范围内(TabList
构造函数的范围)。@Šime Vidas:?你为什么要那样做?如果您使用的是new
,则永远不需要这样做。只有在不使用new
关键字的情况下,您才能这样做。@克里斯,我以为我听到了这个建议,但我不再那么肯定了。:)@AgilemeansdoasLittle我必须说,你为评论回复选择了一个非常不幸的名字。您是否收到关于“@Agile”的通知?将“private”更改为下划线字符,问题仍然存在:(