是否有(简单)编译/转换方式:
function b(){
foo = 9;
function bar(){alert(foo)};
}
这样的事情:
var b = function(){
this.foo = 9;
this.bar = function(){alert(this.foo)};
}
或其他东西,以便我可以像这样使用它:
a = new b();
a.bar();
不改变编写的代码或语法,纯粹通过(预)编译代码?
答案 0 :(得分:0)
不幸的是 - 不容易。你的两个例子的工作方式完全不同(我可能会写你已经知道的东西,但我们可以肯定,重申一下):
function b(){
foo = 9;
function bar(){alert(foo)};
}
这在全局范围内运行 - 所有分配都是对window
对象完成的。
var b = function(){
this.foo = 9;
this.bar = function(){alert(this.foo)};
}
这会创建对象并使用本地范围进行操作。
对于第一个像第二个例子一样工作的例子,你必须对window
对象的克隆进行操作,这让我不寒而栗。它是可行的 - 但你最好重构你提供的代码示例。