iife 返回的函数无法正常工作

iife returned function not working correctly

我正在尝试创建一个模块,并且正在尝试使用正确的设计。我看到 this library,他们有一个 iife 返回 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();

但我收到以下错误:

Uncaught ReferenceError: MyModule is not defined

这里是相关的复制代码:

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

MyModule 保留在 IIFE 闭包内,因此它不会从外部代码可见。将 IIFE 的结果分配给 MyModule 变量

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

最后,您在构造函数中声明一个名为 something 的变量这一事实并没有将其分配为正在构造的对象的 属性。如果你想让 something 是私有的,你必须在构造函数的闭包中声明 alert 方法:

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

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

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

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

  return MyModule;
})();

var module1 = new MyModule();

module1.alert(); // Alerts 'something'
module1.log(); // Logs 'hello'

要真正理解 JavaScript,忘记 类,了解一般的原型和函数,特别是 clousures。

观看此 brilliant conference by Douglas Crockford 以正确理解。

我不太确定你想用这个模块做什么,但基于它的外观。这将始终记录 hello 并设置一个警报功能 'something'。

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