使用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);