可能是一个简单的问题,希望不要重复类似like this one的问题,但是是否有任何规则如何为任何浏览器,node.js等正确编写 IIFE ? />
IIFE示例-第二个是我自己在IE中的实验过程中创建的,观看了所有相关的Pluralsight视频之后。
是否有规则,最佳实践或规范说明如何在IIFE中正确编写方法?
在第一个例子(很常见)中,除了构造函数外,其他所有内容都泄漏了
第二,不是,但不确定为什么或在何处找到此行为的说明。。
经典函数和其匿名版本之间(事件处理程序等)也可能有所不同。
狗(https://coderwall.com/p/ta4caw/using-iife-to-create-private-members-in-javascript)
true-构造函数
假-吸气剂
false-设置器在每个实例中都是唯一的
图表
true-构造函数
true-方法在所有对象中都有单个实例
var Dog = (function() {
var name = "defaut name";
var DogInner = function() {
this.getName = function() {
return name;
};
this.setName = function(value) {
name = value;
};
};
return DogInner;
})(); // this does the trick
var results = ["Dog"]
var dog = new Dog();
var dog1 = new Dog();
results.push(dog.Dog === dog1.Dog); // true
results.push(dog.setName === dog1.setName); // false
results.push(dog.setName === dog1.setName); // false
// IIFE object picked from my code
var Chart = (function() {
function Chart() {}
Chart.prototype.drawChart = function(data) {}
return Chart;
})();
results.push(' ');
results.push("Chart");
var chart1 = new Chart();
var chart2 = new Chart();
results.push(chart1.Chart === chart2.Chart); // true
results.push(chart1.drawChart === chart2.drawChart); // true
console.log(results.join('\n'));
答案 0 :(得分:1)
VS Code还将这个“老派”兼容版本也识别为ES2015类也是正确的:
'use strict';
var Utils = (function() {
function Utils() {}
function GetUrl(data) {
}
Utils.prototype.GetRequest = async function(data) {
const response = await rp(GetUrl(data));
return response;
}
return Utils;
})();
转换为相似,不兼容但更易读的内容:
'use strict';
var Utils = (function() {
class Utils {
constructor() { }
async GetRequest(data) {
const response = await rp(GetUrl(data));
return response;
}
}
function GetUrl(data) {
}
return Utils;
})();
答案 1 :(得分:1)
您是否缺少实例变量?
如果您在IFFE中使用this.variable名称,它将创建实例公共变量,但是只能使用私有静态或公共实例变体。