javascript中模块模式的问题



我学习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函数只是返回测试结果,不使用thisprivate value。那么在IIFE函数之外写isNumber函数可以吗?

总是getPrivateValue函数写在IIFE函数内吗?我在里面写了几个get和set值函数,我觉得它看起来很乱。

感谢您事先的帮助。

在IIFE函数之外写isNumber函数可以吗?

?

是的,这是可以的,因为它是一个"纯函数">
(或者在javascript上下文中的另一种解释:"什么是纯函数?")。

"…总是getprivatvalue函数写入到ife函数中;

?

是的,getter和setter函数总是需要在IIFE内部,以便能够访问私有变量(假设你实际上希望是私有变量)。

如果你把它们安排好,也许加上注释,在我看来,它看起来不会太乱。

另一个注意:

我将避免使用thisbind在你的例子(除非你知道为什么在你的情况下使用它们是更好的选择),因为它增加了复杂性。我将定义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 );
};

相关内容

  • 没有找到相关文章

最新更新