2015-03-08 2 views
0

Я делаю приложение Meteor. В этом приложении я делаю форму, позволяющую пользователю отправлять данные. Во-первых, javascript: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 вызовет его. когда параметр вашей функции является событием, javascript автоматически присоединяет объект события. так как же Javascript делать в этом случае:

Template.post_question_form.events({ 
    'submit form' : function(param1, param2, param3, param4) { 
     console.log("form submitted"); 
    } 
}); 

ответ

2

когда параметр вашей функции является пустым, JavaScript будет назвать его. когда параметр вашей функции является событием, javascript автоматически присоединяет объект события. так как же 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 
+0

спасибо так много: D очень хорошая статья: D –

Смежные вопросы