Javascript 创建全局API对象

Javascript 创建全局API对象,javascript,object,constructor,global,Javascript,Object,Constructor,Global,我在java脚本中使用module via anonymous function模式来创建一个匿名函数,该函数包含整个模块,并通过设置全局属性来公开特定的公共API部分 我尝试了几种设置全局属性的方法,但下面发布的第二种方法失败了: window.foo = (function() { function bar() { this.hello = "world" } return new bar(); })(); > foo.hello "world" // OK vs 为什么第

我在java脚本中使用module via anonymous function模式来创建一个匿名函数,该函数包含整个模块,并通过设置全局属性来公开特定的公共API部分

我尝试了几种设置全局属性的方法,但下面发布的第二种方法失败了:

window.foo = (function() {
  function bar() { this.hello = "world" }
  return new bar();
})();

> foo.hello
"world" // OK
vs


为什么第二种方法不能创建正确的条形图对象?

您应该尝试下面的代码

(function() {
  function bar() { this.hello = "world"; };
  window.foo2 = new bar();
})();

问题是如何使用构造对象。试试这两种方法

window.foo2 = new bar();
function bar() {this.hello = "world";};

在第二种方法中:

(function() {
  window.foo2 = new bar( this.hello = "world" );
  function bar() {}
})();
窗口
,并且

new bar(this.hello = "world") 
等于

window.hello = "world";
new bar(window.hello);
你可以查一下

我想你想要的是:

(function() {
  window.foo2 = new bar( "world" );
  function bar(a) {this.hello = a}
})();

请参见

超出范围,您应该从返回块返回对象。
新栏(this.hello=“world”)
看起来很奇怪。pktangyue,是的,先喝点咖啡。。。对不起,你说得对。。。。但是函数可以在词汇定义之前调用,不是吗?@hotzen但是在你的例子中,在
this.hello=“world”
中,这是匿名的自动执行函数,而不是条。在你的第二个例子中,“world”一词存储在window.hello中
window.hello = "world";
new bar(window.hello);
(function() {
  window.foo2 = new bar( "world" );
  function bar(a) {this.hello = a}
})();