У меня есть следующий код
1) var x = {};
x.data = {name: 'name', lname: 'lname'};
x.someOtherData = ['blah','blah','irrelevant'];
aFunction(x);
Таким образом, я называю вышеупомянутую группу утверждений несколько раз, порядок утверждений является важным, конечно. Иногда я забываю сделать последнее утверждение aFunction (x), которое вызвало у меня много головной боли, поэтому я сделал следующее:
2) aFunction(function(){
var x = {};
x.data = {name: 'name', lname: 'lname'};
x.someOtherData = ['blah','blah','irrelevant'];
return x;
}());
Что работает, и мне было любопытно, если бы в моем методе функции aFunction был способ принудительно указать, что передаваемый параметр должен быть анонимной функцией. Я возвращаю объект из этой анонимной функции, поэтому следующее, очевидно, не будет работать
3) function aFunction(x) {
if(x.constructor == Function) {
alert('yay you're doing it right');
} else {
alert('nay, you're doing it wrong'); //this is what happens given that x.constructor == Object
}
}
Я знаю, что могу сделать следующее, и вышеуказанная проверка будет работать, но я хотел бы заключить всю мою логику в аргумент aFunction в скобках, как в фрагменте кода 2:
4) var z = function(){
var x = {};
x.data = {name: 'name', lname: 'lname'};
x.someOtherData = ['blah','blah','irrelevant'];
return x;
};
aFunction(z);
Есть идеи?
Обновление:
Неважно, я понял это. Я не могу сразу вызвать анонимную функцию, как я это сделал, и вызвать ее в методе Function. Конечно, помогает выписать ваши проблемы при переполнении стека, чтобы проблема и решение были более понятными. Все еще открыто, как другие решают подобные проблемы. Шаблоны проектирования и т.д ..
Решение:
aFunction(function(){
var x = {};
x.data = {name: 'name', lname: 'lname'};
x.someOtherData = ['blah','blah','irrelevant'];
return x;
});
function aFunction(x) {
if(x.constructor == Function) {
alert('yay you're doing it right');
x(); //call it here
} else {
alert('nay, you're doing it wrong');
}
}