我想这可能是一个简单的问题,但我自己无法弄明白(使用错误的搜索条件?)。
正如标题所说,我想为变量分配一个函数,并将变量传递给该函数,如下所示:
function doStuff(control) {
var myObj = {
"smooth": false,
"mouseup": function(value) {
jQuery(_getSelectorStringFromControlId(control.id)).blur();
}
};
}
现在我希望在将函数分配给 mouseup 变量之前,将control.id替换为其实际值。
所以当control.id ='myOwnId'时,myObj.mouseup
应为:
function(value) {
jQuery(_getSelectorStringFromControlId('myOwnId')).blur();
}
如何实现这一目标?
答案 0 :(得分:2)
这是将函数赋值给变量
的基本形式var myFunc = function(x) {
console.log(x);
}
一旦完成,您可以像这样调用函数(传入任何你想要的东西)
myFunc(1);
答案 1 :(得分:1)
您必须致电:
var some_control = {id: "myOwnId"};
doStuff(some_control);
它使用对象文字{ }
创建一个对象。然后,定义属性id
。整个对象作为参数传递给函数doStuff
。
答案 2 :(得分:1)
我认为你在这里寻找的是一个闭包,它是一个函数,它记住创建时的范围内的变量(在你的情况下是“控制”),然后从其他地方调用。在您的示例中,您可以从doStuff函数返回myObj,每当调用mouseup()时,它将引用控件的“右”值。所以实际上,你已经在该示例代码中创建了一个闭包。
如果你想让闭包只保留对id的引用,你可以这样做:
function doStuff(control) {
var myId = control.id;
var myObj = {
"smooth": false,
"mouseup": function(value) {
jQuery(_getSelectorStringFromControlId(myId)).blur();
}
};
}
您现在可以在页面上方放置大量myObj副本,并且每个副本上的mouseup()将使用不同的ID。
关于闭包的更多信息: https://developer.mozilla.org/en/JavaScript/Guide/Closures
顺便说一句,对于那些从未做过任何函数式编程的人来说,闭包是最好的事情。
答案 3 :(得分:0)
function doStuff(control) {
var myObj = {
"smooth": false,
"mouseup": function(value) {
jQuery(_getSelectorStringFromControlId(control.id)).blur();
}
};
}
doStuff({id: "yourID"}); // works now
在jsFiddle上进行测试。
还有一个问题:您无法访问内部value
参数,但我假设您要将此匿名函数绑定到事件侦听器。