使用 Javascript IFFE 得到 Uncaught TypeError 不是一个函数

With a Javascript IFFE getting a Uncaught TypeError is not a function

我试图在 JavaScript 中编写一些匿名函数 IFFE 的东西,但我不明白为什么我会收到这个错误

Uncaught TypeError: dM.getResources is not a function

Fiddle https://jsfiddle.net/MillerDev/5qmnqr6q/

是什么原因造成的?

reportGroupDataManager(通常这是 reportGroupDataManager.js 文件)

var reportGroupDataManager = (function() {
   var self = this;
   // cannot do this below   as dM.getResources is not a function
   //self.getResources = "blah";

  self.getResources = function() {
    return object;
     // return ajaxHelper.get(actions.adminReports.getResourceFileUrl, {});
  };

  console.log('reportGroupDataManager');

  return self;
});

数据(当前占位符)

function data() {
   console.log('in data'); 
}

IFFE

(function(jQ, dM, data) {
    var self = this;

    var initializePage = function () {
       console.log('in init');
    };

    dM.getResources()
        .done(initializePage, function(result) {
            console.log('in fx');
            console.log(result);
            console.log(result.CannotDeleteWithChild);
        });

})($, reportGroupDataManager, data);

所以通常 dM.getResources() 会从 reportGroupDataManager 中获取数据,其中 result 是一个对象

但是使用这段代码我不确定为什么会出错

同上 Fiddle --> https://jsfiddle.net/MillerDev/5qmnqr6q/

reportGroupDataManager 是构造函数,不是对象。但是您期待 reportGroupDataManager 创建的对象。因此 IIFE 应该是这样的:

(function(){
   // ...
})($, new reportGroupDataManager(), data);

dM 不是构造函数,因此您不能使用 "this" 作为对 dM

的引用

你需要'new'这样的功能

function ReportGroupDataManager(){
this.getResources = function(){
  return object
}
}

let reportGroupDataManager = new ReportGroupDataManager()

(function(jQ, dM, data) {
    var self = this;

    var initializePage = function () {
       console.log('in init');
    };

    dM.getResources()
        .done(initializePage, function(result) {
            console.log('in fx');
            console.log(result);
            console.log(result.CannotDeleteWithChild);
        });

})($, reportGroupDataManager, data);