-1

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

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

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

> foo.hello
"world" // OK

对比

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

> foo2.hello
undefined // Fail

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

4

3 回答 3

5

在您的第二种方法中:

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

thiswindow, 并且

new bar(this.hello = "world") 

等于

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

你可以在这里查看

我认为你想要的是:

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

这里

于 2013-03-13T07:51:12.573 回答
1

你应该试试下面的代码

(function() {
  function bar() { this.hello = "world"; };
  window.foo2 = new bar();
})();
于 2013-03-13T07:47:15.917 回答
1

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

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

或者

window.foo2 = new bar("world");
function bar(x) {this.hello = x;};
于 2013-03-13T07:50:17.947 回答