Javascript将普通函数转换为构造函数

Javascript将普通函数转换为构造函数,javascript,object,Javascript,Object,是否有一种简单的编译/转换方法: 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(); 或者别的什么,我可以这样使用它: var b = function(){ this.foo = 9; this.bar =

是否有一种简单的编译/转换方法:

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();
或者别的什么,我可以这样使用它:

var b = function(){
  this.foo = 9;
  this.bar = function(){alert(this.foo)};
}
a = new b();
a.bar();

在不更改编写的代码或语法的情况下,仅通过预编译代码?

不幸的是,这并不容易。您的两个示例的工作方式完全不同,我可能正在写您已经知道的内容,但可以肯定的是,让我们重申:

function b(){
  foo = 9;
  function bar(){alert(foo)};
}
这在全局范围内操作-所有赋值都对窗口对象完成

这将创建对象并使用本地作用域进行操作


要使第一个示例像第二个一样工作,您必须对window对象的克隆进行操作,这让我不寒而栗。这是可行的-但是你最好重构你提供的例子中的代码。

第二个代码段有问题吗?既然第一个语法不起作用,为什么你要使用第一个语法?我想定义整个javascript文件的范围,这样如果该文件中定义了函数栏,它可以通过filename.bar或类似的方式调用,但是为什么要将该文件包装到这个函数b中呢?您应该简单地为它使用模块模式。