Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中作为参数传递常规函数?_Javascript_Forms_Parameter Passing - Fatal编程技术网

在JavaScript中作为参数传递常规函数?

在JavaScript中作为参数传递常规函数?,javascript,forms,parameter-passing,Javascript,Forms,Parameter Passing,我正在React.js中创建一个带有验证的表单。是否有一种方法可以将“常规”函数作为参数传入?我有验证表单中每个输入的函数。例如,如果我有: updateState(e) { if (this.validateEmail(e.target.value) === true) { this.setState({[e.target.className]: e.target.value}); this.setState({errorMsg:

我正在React.js中创建一个带有验证的表单。是否有一种方法可以将“常规”函数作为参数传入?我有验证表单中每个输入的函数。例如,如果我有:

updateState(e) {
        if (this.validateEmail(e.target.value) === true) {
            this.setState({[e.target.className]: e.target.value});
            this.setState({errorMsg: 'Valid'});
            document.getElementById(e.target.className).className = "green";
        }
        else if (e.target.value.length === 0) {
            this.setState({errorMsg: 'Empty submission'});
            document.getElementById(e.target.className).className = "red";
        }
        else {
            this.setState({errorMsg: 'Invalid form input'});
            document.getElementById(e.target.className).className = "red";
        }
}
我希望能够传入validateName、validateEmail和validateAddress等函数,因此看起来如下所示:

updateState(e, parameterFunction) {
            if (this.parameterFunction(e.target.value) === true) {
                this.setState({[e.target.className]: e.target.value});
                this.setState({errorMsg: 'Valid'});
                document.getElementById(e.target.className).className = "green";
            }
            else if (e.target.value.length === 0) {
                this.setState({errorMsg: 'Empty submission'});
                document.getElementById(e.target.className).className = "red";
            }
            else {
                this.setState({errorMsg: 'Invalid form input'});
                document.getElementById(e.target.className).className = "red";
            }
    }
这可能吗


谢谢大家,这是我的第一个问题

是的,你可以这样做,但是这个函数没有在你的
这个
对象中定义,它就像另一个变量,只要调用它就行了

function updateState(e, validateName, validateEmail, validateAddress) {
    var data = e.target.value;

    if (validateName(data.name) && validateEmail(data.mail) && validateAddress(data.address) {
            //Do some stuff
    }
}

是的,你可以这样做,但是这个函数没有在你的
this
对象中定义,它就像另一个变量,只要调用它就行了

function updateState(e, validateName, validateEmail, validateAddress) {
    var data = e.target.value;

    if (validateName(data.name) && validateEmail(data.mail) && validateAddress(data.address) {
            //Do some stuff
    }
}

不要想得太多。函数在JavaScript中是一流的实体——只需像传递其他任何东西一样传递它们@谢谢你的回复。那么,如果我用validateEmail作为参数调用上面的示例,它会起作用吗。下面的答案更适合您的具体示例,因此为了演示起见,我将提供一些通用的答案:
constdouble=n=>n+n
const applyFunction=(n,f)=>f(n)
applyFunction(1,double)
/=>2
(编辑:是否有更好的方法在注释中格式化代码块?)。函数在JavaScript中是一流的实体——只需像传递其他任何东西一样传递它们@谢谢你的回复。那么,如果我用validateEmail作为参数调用上面的示例,它会起作用吗。下面的答案更适合您的具体示例,因此为了演示起见,我将提供一些通用的答案:
constdouble=n=>n+n
const applyFunction=(n,f)=>f(n)
applyFunction(1,double)
/=>2
(编辑:是否有更好的方法格式化注释中的代码块?)