gpt4 book ai didi

javascript - 如何将服务传递给 IIFE?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:31:31 24 4
gpt4 key购买 nike

我目前在 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); 行抛出一个错误:

Test is not a function

我也知道在 IIFE 中,必须传入值,因为它是立即调用 所以最后一行应该是这样的:

}(服务));

可以使这段代码工作 如果我只是删除 Test 作为持有 IIFE 的全局变量,而是使它成为一个全局函数以下签名:

函数测试(服务){}

但是,我正在使用 IIFE 来尝试防止污染全局范围。是否有可能我仍然可以像我设计的那样使用它并稍后将我的 Service 实例传递给 Test?或者如果它的所有输入在被调用时都被解析并且因此传递值是不可能的(或者我可能必须使 service 成为一个参数,它是否只能是一个 IIFE 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 值将是sloppy 模式下的全局对象或严格模式下的undefined。所以 me.service = service 会污染全局范围或抛出错误。只需删除它,或者实例化而不是调用:new Test(myService)

关于javascript - 如何将服务传递给 IIFE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37084104/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com