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

时间:2014-07-01 10:35:44

标签: 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();

不改变编写的代码或语法,纯粹通过(预)编译代码?

1 个答案:

答案 0 :(得分:0)

不幸的是 - 不容易。你的两个例子的工作方式完全不同(我可能会写你已经知道的东西,但我们可以肯定,重申一下):

function b(){
  foo = 9;
  function bar(){alert(foo)};
}

这在全局范围内运行 - 所有分配都是对window对象完成的。

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

这会创建对象并使用本地范围进行操作。

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