在同一个命名空间内调用函数
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;
}
}
我正在 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;
}
}