创建全局API对象

时间:2013-03-13 07:38:50

标签: javascript object constructor global

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

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

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

> foo.hello
"world" // OK

VS

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

> foo2.hello
undefined // Fail

为什么第二种方法没有创建合适的条形对象?

3 个答案:

答案 0 :(得分:5)

在你的第二种方法中:

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

thiswindow

new bar(this.hello = "world") 

等于

window.hello = "world";
new bar(window.hello);

您可以查看here

我认为你想要的是:

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

请参阅here

答案 1 :(得分:1)

你应该尝试以下代码

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

答案 2 :(得分:1)

问题是使用构造对象的方法。尝试这两种方式。

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

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