Javascript,我可以传递对当前对象的引用以在对象文字定义中起作用吗?

时间:2011-04-28 16:42:07

标签: javascript function object-literal

早上好,

我有一个函数,它接受一个选项哈希作为它的参数,我可以在一个对象文字定义中调用该函数吗?喜欢这个

 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?)}  };

我希望我的问题有道理。也许我在标题中说错了。无论如何,如果有人能在这里理顺我,我会非常感激。感谢任何提示或技巧。

干杯,
〜在圣地亚哥

3 个答案:

答案 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