【问题标题】:Javascript turn normal function into constructorJavascript将普通函数变成构造函数
【发布时间】:2014-07-01 18:59:48
【问题描述】:

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

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();

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

【问题讨论】:

  • 第二个sn-p有问题吗?
  • 为什么你有第一个语法(因为它不起作用)?
  • 我想定义整个 javascript 文件的范围,这样如果函数 bar 在该文件中定义,它可以通过 filename.bar (或类似的东西)调用
  • 但是你为什么把那个文件包装在这个function b中呢?您应该简单地使用模块模式。

标签: javascript object


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-25
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多