我正在制作Meteor应用程序。在这个应用程序中,我创建一个允许用户提交数据的表单。首先javascript是:
Template.post_question_form.events({
'submit form' : function() {
console.log("form submitted");
}
});
之后,作为教程。我添加了事件参数:
Template.post_question_form.events({
'submit form' : function(event) {
console.log("form submitted");
}
});
一切都按照我的预期运行。我不知道的问题是:我来自Java世界(强类型语言世界),所以我不知道Javascript如何解决这个问题。当你的函数参数为空时,javascript会调用它。当你的函数参数是event时,javascript会自动将event对象附加到这个参数中。那么javascript在这种情况下如何做:
Template.post_question_form.events({
'submit form' : function(param1, param2, param3, param4) {
console.log("form submitted");
}
});
答案 0 :(得分:2)
当你的函数参数为空时,javascript会调用它。当你的函数的参数是event时,javascript会自动将event对象附加到这个中。那么在这种情况下javascript是如何做的
它没有:无论什么是调用,你的函数总是将它传递给事件对象。但是在JavaScript中,与Java不同,您可以使用比它声明的更多或更少的参数调用函数。例如:
function takesNoArguments() {
snippet.log("takesNoArguments");
}
function takesOneArgument(one) {
snippet.log("takesOneArgument: one = " + one);
}
takesNoArguments(); // Call it with no args
takesNoArguments('foo'); // Call it with an arg
takesOneArgument(); // Call it with no args
takesOneArgument('foo'); // Call it with an arg
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
输出:
takesNoArguments takesNoArguments takesOneArgument: one = undefined takesOneArgument: one = foo
如果你调用的JavaScript函数的参数多于它声明的参数,那就没关系了(函数实际上可以得到它们,下面的内容更多)。如果你使用更少的参数来调用JavaScript函数,那么这也很好;你没有传递它的声明参数得到值undefined
。
那么如果一个函数没有声明它们,如何能够访问你传递给它的额外参数?通过魔术伪数组arguments
。我们稍微修改上面的代码段:
function takesNoArguments() {
snippet.log("takesNoArguments: arguments.length = " + arguments.length + ", arguments[0] = " + arguments[0]);
}
function takesOneArgument(one) {
snippet.log("takesOneArgument: one = " + one + ", arguments.length = " + arguments.length + ", arguments[0] = " + arguments[0]);
}
takesNoArguments(); // Call it with no args
takesNoArguments('foo'); // Call it with an arg
takesOneArgument(); // Call it with no args
takesOneArgument('foo'); // Call it with an arg
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
输出:
takesNoArguments: arguments.length = 0, arguments[0] = undefined takesNoArguments: arguments.length = 1, arguments[0] = foo takesOneArgument: one = undefined, arguments.length = 0, arguments[0] = undefined takesOneArgument: one = foo, arguments.length = 1, arguments[0] = foo