在同一个命名空间内调用函数

Calling function within the same namespace

我正在 javascript 中构建验证模块,并希望根据输入元素的数据属性调用某些验证函数。

所以要调用的函数是一个变量,我习惯这样调用所述函数:window[var_name]()

但是在模块化环境中这似乎行不通;如果我将所述功能替换为不同的模块并导入它;有用;但我最好在验证模块中使用这些函数及其逻辑。

//--- ./validation.js

// importing common functions
import * as common from './common.js';

export function validateInput($el)
{
  let type = $el.data('validation-type').split('|');
  let val = $el.val();

  // some whitelisting logic
  // and traversing the type-array
  var functionName = 'valid_'+type[i]; // eg valid_email

  // This works if I place the `valid_email()` function in common.js
  var result = common[functionName](val); 

}

function valid_email(val)
{
   // some validation logic
   return true;
}

因此将函数替换为它自己的 common.js 和 importing/namespacing 它作为普通作品;因为它使用它的(公共)命名空间。

但是我怎样才能在同一个模块中调用函数呢?

将函数附加到对象并像这样调用它:

    //--- ./validation.js

// importing common functions
import * as common from './common.js';

export function validateInput($el)
{
let type = $el.data('validation-type').split('|');
let val = $el.val();

// some whitelisting logic
// and traversing the type-array
var functionName = valid[type[i]]; // valid.email() below

// how the call looks now
var result = functionName(val); 

}

var valid = {
    email: function(val) {
        // some validation logic
        return true;
    }
}