使用Javascript IFFE获取未捕获的TypeError不是一个函数

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

Uncaught TypeError: dM.getResources is not a function

小提琴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获取数据,其中resultA是一个对象

但是这个代码我不知道为什么会出错

同上级小提琴 – > https://jsfiddle.net/MillerDev/5qmnqr6q/

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

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

dM不是构造函数,因此你不能使用“this”作为dM的限制

你需要’新’这样的function

 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); 
Interesting Posts