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: dataCallback(//what can I pass here? this? x? obj.x? nothing seems to work...)}
           , y : {id = '#someId2', callback: dataCallback(///???, this? y? obj.y?)}  };

我希望我的问题是有道理的。也许我在标题中措辞不正确。无论如何,如果有人可以在这里理顺我,我将不胜感激。感谢您提供任何提示或技巧。

干杯,
~ck 在圣地亚哥

4

3 回答 3

3

据我了解,您希望将函数的返回值分配给对象的属性并将对象本身传递给函数。它是否正确?

你不能一口气做到这一点。您必须分开步骤:

var obj = {
    x: {id: '#someId1'},
    y: {id: '#someId2'}
}; 

obj.x.callback = dataCallback(obj.x);
obj.y.callback = dataCallback(obj.y);
于 2011-04-28T16:46:58.393 回答
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),您需要将其放在 anon fn 中,否则 this 不是指对象,而是指全局DOMWindow

于 2011-04-28T16:46:30.017 回答
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

于 2011-04-28T16:53:35.883 回答