我是一个典型的用例(可能对我的用例过于具体)。
我是这样的一块:
var x=0,y=10;
var data = {"callback" : function(x,y) {console.log(x,y)}}
代码流中的某些地方我异步调用匿名函数
call(data.callback);
我的问题是在第二段代码中我没有在调用函数时传递x,y的数据。那么,有没有什么方法可以在声明函数本身时附加数据(x,y变量数据)?
编辑1:
@Kursad Gulseven,因为,为了简单起见,我表现得那样。
但是,在实际情况下,"数据","回调"是动态名称。所以,我不能简单地使用data.callback。
虽然我这样做,但我不能拥有变量(有数据),我试图调用我的匿名函数。因为调用匿名函数又来自另一个异步函数,这就是这里的问题。
希望它清楚并且有道理。
答案 0 :(得分:1)
在数据对象可用时注入x和y。
data = {
x: null,
y: null,
"callback": function(x, y) {
x = x || this.x;
y = y || this.y;
console.log(x, y);
}
}
data.x = 0
data.y = 10;
// I'm assuming here you have a way to know how the "data" object is called
// and how to access it. (the obejct it's attached to)
// For simplicity, I used a global
var dataName = 'data',
callbackName = 'callback';
//using a wrapper function without parameters, like in your example
// call(data.callback);
//calling without parameters
window['data']['callback']();
// calling with parameters
window[dataName][callbackName](15, 25);

注意: 如果您通过某种异步调用获取x和y,则可能需要检查promise pattern
答案 1 :(得分:1)
我不确定为什么你不能设置data.x
和data.y
然后读取这些值,如另一个答案所提到的那样。如果这不令人满意,那么当你获得x
和y
时,也许你可以构建一个闭包(具有x
和y
预设的函数),如下所示:
function setCallback(x,y){
return (function(){console.log(x,y);});
}
data.callback=setCallback(0,10);
data.callback
与您的功能相同,只有x
和y
预设为您提供的示例值。
执行data.callback();
然后在控制台中生成0 10
。