我学习javascript中的模块模式还有一个问题。
module.js
function isNumber(val) {
return /0-9/gi.test(val);
}
function doSomething(val) {
if (!isNumber(val * this.getPrivateValue())) {
return false;
}
return true;
}
export default (function() {
var v = {};
var privateValue = 2;
v.doSomething = doSomething.bind(v);
v.getPrivateValue = function() {
return privateValue;
}
return v;
})();
在这种情况下,isNumber
函数只是返回测试结果,不使用this
或private value
。那么在IIFE函数之外写isNumber
函数可以吗?
总是getPrivateValue
函数写在IIFE函数内吗?我在里面写了几个get和set值函数,我觉得它看起来很乱。
感谢您事先的帮助。
在IIFE函数之外写isNumber函数可以吗?
?
是的,这是可以的,因为它是一个"纯函数">
(或者在javascript上下文中的另一种解释:"什么是纯函数?")。
"…总是getprivatvalue函数写入到ife函数中;
?
是的,getter和setter函数总是需要在IIFE内部,以便能够访问私有变量(假设你实际上希望是私有变量)。
如果你把它们安排好,也许加上注释,在我看来,它看起来不会太乱。
另一个注意:
我将避免使用this
和bind
在你的例子(除非你知道为什么在你的情况下使用它们是更好的选择),因为它增加了复杂性。我将定义IIFE内部的函数,如果有必要,在IIFE外部有独立的函数。例如:// outside the IIFE:
function doSomethingGeneric( val, otherVal ){
if( !isNumber( val * otherVal ) ){
return false;
}
return true;
}
// ...
// inside the IIFE:
v.doSomethingSpecific = function( val ){
return doSomethingGeneric( val, privateValue );
};