早上好,
我有一个函数,它接受一个选项哈希作为它的参数,我可以在一个对象文字定义中调用该函数吗?喜欢这个
function dataCallback(opts) {
var rowSelector = opts['id'] + ' .gridContent';
var liSelector = opts['id'] + ' li';
return function(args) { //do something with opts...
return;
}
//omitted...
}
var obj = { x : {id = '#someId1', callback: dataCallback(//what can I pass here? this? x? obj.x? nothing seems to work...)}
, y : {id = '#someId2', callback: dataCallback(///???, this? y? obj.y?)} };
我希望我的问题有道理。也许我在标题中说错了。无论如何,如果有人能在这里理顺我,我会非常感激。感谢任何提示或技巧。
干杯,
〜在圣地亚哥
答案 0 :(得分:3)
据我所知,您希望将函数的返回值赋给对象的属性,并将对象本身传递给函数。这是对的吗?
你不能一气呵成。你必须分开步骤:
var obj = {
x: {id: '#someId1'},
y: {id: '#someId2'}
};
obj.x.callback = dataCallback(obj.x);
obj.y.callback = dataCallback(obj.y);
答案 1 :(得分:2)
试试这个:
function dataCallback(opts) {
var rowSelector = opts['id'] + ' .gridContent';
var liSelector = opts['id'] + ' li';
return function(args) { //do something with opts...
return;
}
//omitted...
}
var obj = {
x: {
id: '#someId1',
callback: function(){dataCallback(this)}
}, y: {
id: '#someId2',
callback: function(){dataCallback(this)}
}
};
obj.x.callback();
为了做dataCallback(this)
你需要把它放在一个匿名fn中,否则这不是指对象,它指的是全局DOMWindow
答案 2 :(得分:0)
是的,没有任何作用,因为JSON不能自我引用,只有Firefox现在支持JSON中的Sharp变量,所以你可以像这样写:
function dataCallback(opts) {
// your logic here
return function(args) { /* logic here */ };
}
var obj = {
x:#1={
id: '#someId1',
callback: dataCallback(#1#)
},
y:#2={
id: '#someId2',
callback: dataCallback(#2#)
}
};
请注意,Sharp变量只有Firefox的一些版本支持,并且可能会在将来删除,因此请考虑使用它。 Sharp变量中的语法非常严格,因此您应该在每个字符中写入“x:#1 = {”而没有任何额外空格。
参考Sharp变量:https://developer.mozilla.org/en/Sharp_variables_in_JavaScript