我目前在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)中,必须传入值,因为它会立即执行,所以最后一行应该像这样:Test 不是一个函数
}(service));
如果我只是删除全局变量 Test
,并将其替换为以下签名的全局函数,则可以让此代码正常工作:
function Test(service) {}
但是,我使用 IIFE 试图防止污染全局范围。我是否仍然可以按照我的设计使用它,并稍后将我的 Service 实例传递给 Test?或者,如果在调用 IIFE 时无法解析所有输入,则它只能是 IIFE 吗(或者我必须使 service 成为 IIFE 中每个公开方法的参数,需要它)?我试图避免必须将服务传递给每个方法。如果可能,我想传递服务实例,但如果我理解有误,请纠正我。
Test
仍将是全局变量。 - plalxfunction Test(service) { this.myService = service}
,并尝试在稍后使用它时,例如在my.getData1
这样的方法中使用var result = this.carservice.GetData1();
,我收到了Cannot read property 'GetData1' of undefined
的错误提示。我认为这是因为this
被绑定到创建的对象上,而不是按照我期望的方式工作。我有一个解决方法,就是将this
分配给另一个变量,例如var me = this
。你认为呢? - atconway