今天晚些时候,我是通过ejhon.com幻灯片滚动,我发现了以下工作:JavaScript的新的关键字和对象作用域
给这个代码
function katana() {
this.myvar = true;
}
katana();
console.info (myvar);
过去的那一刻我编译的代码,我认为myvar附属于katana功能。实际上,它会附加到污染全局命名空间的窗口对象。
我回到自己的项目,这些项目都采用同样的办法..有点不同
function katana() {
this.myvar = true;
}
var xyz = new katana();
console.info (myvar);
我有一个函数对象,而不是执行的功能,我只是创建它的一个新实例(我并不确定发生了什么)。然后我使用xyz存储值并通过原型方法使用这些值来完成一些工作。
让我感到惊讶的是,当我用FireBug进行一些调试时,xyz并不存在。没有变量附加到窗口对象。为什么?
我做了一些更多的调试,xyz对象连接到window> object,但是在DOM中它并不明显,也没有任何痕迹。在调试窗口中还有一些新东西,一个叫做“scopechain”的节点带有一个调用,它具有xyz对象的值。
好的,底下发生了什么?这是一种我应该坚持的好方法,还是我应该寻找替代方案? 我看了一些问题和答案,我主要是在寻找这种方法在后台做什么。
阅读本文http://ejohn.org/apps/learn/ – 2010-08-04 19:35:04
其实我正在浏览它。我只是寻找更深的解释,因为这些幻灯片只显示结果。 – 2010-08-04 19:42:25