iife返回功能无法正常工作

时间:2016-07-17 22:18:04

标签: javascript iife

我正在尝试创建一个模块,而我正在尝试使用正确的设计。我看到了rename,他们有一个生命回归function那个模块。我试着这样做:



(function() {
  function MyModule() {
    var something = 'something';
    this.log = log();
  }

  MyModule.prototype.alert = function() {
    alert(this.something);
  };

  function log() {
    console.log('hello');
  }

  return MyModule;
})();

var module1 = new MyModule();




但是我收到以下错误:

  

未捕获的ReferenceError:未定义MyModule

以下是相关的复制代码:

我做错了什么,我该如何解决?

2 个答案:

答案 0 :(得分:1)

>>> class A(object): pass >>> A.b = B(10, '') >>> x = A() >>> x.__dict__ {} >>> x.b B Retrieving 10 留在IIFE clousure内部,因此从外面的代码中看不到它。将IIFE的结果分配给MyModule变量

此外,您可能打算将MyModule函数分配给正在构建的log,而不是其结果(MyModule

最后,在构造函数中声明一个名为undefined的变量的事实并未将其指定为正在构造的对象的属性。如果您希望something是私有的,则必须在构造函数的clousure中声明something方法:

alert

要真正理解JavaScript,忘记课程,一般学习原型和功能,特别是clousures。

观看此brilliant conference by Douglas Crockford以使其正确。

答案 1 :(得分:1)

我不确定你要对这个模块做什么,但要看它的外观。这将始终记录hello,并设置警报功能,提醒“某事”。

var MyModule = (function() {
    var something = 'something';

  this.prototype.alert = function() {
    alert(this.something);
  };

    console.log('hello');
})();

var module1 = new MyModule();

但是,如果你想把它设置为通过不同的东西来提醒和记录你应该能够这样做。

var MyModule = (function( txt ) {
    var something = this.txt;

  this.prototype.alert = function() {
    alert(something);
  };

    console.log('hello '+ something);
})();

var module1 = new MyModule();
   module1('this is awesome text');