因此,我正在使用模块模式使用私有和公共方法以及属性创建自己的“ API”。到目前为止一切顺利。
但是:我想添加一个可由用户更改/实现的公共功能/挂钩。
但是,问题在于,当从模块内部调用函数时,它仍然知道先前的定义。如何确保不必使用模块内的变量名就能使用覆盖的定义?
var test = (function(){
'use strict';
var version = "1.7.0";
var a = function(){
console && console.log("Test");
defineC();
c();
};
var _b = function(){
a();
};
var c = function(){
//User implementable
};
return {
version: version,
a: a,
c: c
};
})();
function defineC(){
test.c = function(){
console && console.log("My own function");
};
}
test.a();
答案 0 :(得分:1)
您需要将覆盖函数作为IIFE的参数传递
喜欢
var test = (function(userFunction){
'use strict';
var version = "1.7.0";
var a = function(){
console.log("Test");
c();
};
var _b = function(){
a();
};
var c = userFunction;
return {
version: version,
a: a,
c: c
};
})(defineC);
function defineC(){
console.log("My own function");
}
test.a();