如何将服务传递给IIFE
How to pass service to an IIFE?
我目前在JavaScript
中有以下基本IIFE
:
var Test = (function(service){
var me = this;
me.service = service;
var my = {};
my.getData1 = function(){
return me.service.GetData1();
}
my.getData2 = function(){
return me.service.GetData2();
}
return my;
}());
我想做的是:
var myService = new Service(); //code omitted but its a service class that gets data
var myTest = Test(myService);
以上内容不起作用。线路var myTest = Test(myService);
抛出错误:
测试不是的功能
我还知道,在IIFE
中,必须传入值,因为会立即调用,所以最后一行应该类似于:
}(service));
如果我只是删除Test
作为保持IIFE
的全局变量,而使其成为具有以下签名的全局函数,则我可以使此代码工作:
function Test(service) {}
然而,我正在使用IIFE
来防止污染全球范围。我是否仍然可以按照我的设计使用它,并在稍后将我的Service
的实例传递给Test
?或者,如果在调用它时解析了它的所有输入,因此不可能传递值,那么它只能是IIFE
吗?(或者,我必须使service
成为IIFE
中公开的每个需要它的方法的参数)?
我试图避免将服务传递给每个方法。如果可能的话,我想传入服务实例,但可能我的理解不正确,所以如果是,请纠正我。
如果您想避免污染全局范围,您应该将代码封装在IIFE中,而不是将函数转换为IIFE。这没用,而且很可能你不能给他们打电话。
(function() {
var Test = function(service){
var my = {};
my.getData1 = function(){
return service.GetData1();
}
my.getData2 = function(){
return service.GetData2();
}
return my;
};
var myService = new Service();
var myTest = Test(myService);
})();
请注意,如果调用Test(myService)
,则this
值将是草率模式下的全局对象,或是严格模式下的未定义对象。因此me.service = service
要么会污染全局范围,要么会抛出错误。只需删除它,或者实例化而不是调用:new Test(myService)
。
IIFE将执行该函数。由于函数返回my
,因此实际上是将Test
的值设置为my
,即(Test=my
)。您希望Test
保存一个函数,而不是它的结果。你可以做一些类似的事情
var Test = function (someArg) {
return function (someArg) {
console.log(someArg);
};
};
(Test())(12); //logs 12
- 如何使用WCF服务和javascript表单post上传.doc文件
- 监视函数从服务返回不起作用,但作用域函数起作用
- 通过Magento的网络服务检索运费
- IIFE中的函数引用不可用
- 在同一个服务工作者中处理service-worker.js有任何影响吗
- 使用angular.js问题的JavaSpringREST服务
- AngularJS-需要在index.html页面中访问来自服务的数据
- 如何在Ionic2测试版中包含Ionic.io服务
- 基于api密钥的NodeJS web服务
- Redux应用程序结构-在哪里放置服务/业务逻辑
- Liferay:从portlet调用JSON服务
- 使用javascript在客户端上使用Web服务
- 如何通过安全的https连接在javascript中使用基于soap xml的Web服务
- 从Javascript连接到SOAP Web服务
- 如何检测服务广告维度
- 很少有角服务,只有常数不同
- 如何在服务、技能、投资组合等方面添加滑动效果
- 尝试将服务链接到控制器时出现角度问题
- Sails.js:我可以将一些服务/模型打包为npm并在Sails.jss应用程序中加载npm吗
- 如何将服务传递给IIFE