【发布时间】:2012-01-06 12:10:05
【问题描述】:
我有以下代码
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 参数中,如代码 sn-p 2 中所示:
4) var z = function(){
var x = {};
x.data = {name: 'name', lname: 'lname'};
x.someOtherData = ['blah','blah','irrelevant'];
return x;
};
aFunction(z);
有什么想法吗?
更新:
没关系,我想通了。我不能像以前那样立即调用匿名函数,而是在 aFunction 方法中调用它。当然有助于在堆栈溢出中写出您的问题,以便问题和解决方案更清晰。仍然对其他人如何解决类似问题持开放态度。设计模式等。
解决方案:
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');
}
}
【问题讨论】:
-
我不确定我是否完全理解 - 您是否想要选项 #4 但只是在通话中内联
function() {...}?这样,您将在“aFunction 参数内部”传递匿名函数。 -
对了,你考虑过只做
aFunction({ data: {...}, someOtherData: [...] });吗?
标签: javascript anonymous-function argument-passing