JavaScript 模块模式:用户可实现的功能
JavaScript Module Pattern: user implementable function
所以我使用模块模式来创建我自己的 'API' 以及私有和 public 方法和属性。到目前为止一切顺利。
但是:我想添加一个 public function/hook 可以由用户changed/implemented。
然而,问题是当从模块内部调用该函数时,它仍然知道先前的定义。我怎样才能确保使用覆盖的定义而不必在模块中使用变量名?
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();
您需要将重写函数作为参数传递给 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();
所以我使用模块模式来创建我自己的 'API' 以及私有和 public 方法和属性。到目前为止一切顺利。
但是:我想添加一个 public function/hook 可以由用户changed/implemented。
然而,问题是当从模块内部调用该函数时,它仍然知道先前的定义。我怎样才能确保使用覆盖的定义而不必在模块中使用变量名?
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();
您需要将重写函数作为参数传递给 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();