Javascript,我可以将对当前对象的引用传递给对象文字定义中的函数吗?

Javascript,我可以将对当前对象的引用传递给对象文字定义中的函数吗?,javascript,function,object-literal,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;

早上好

我有一个以选项散列作为参数的函数,我可以在对象文本定义中调用该函数吗?像这样

 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在圣地亚哥

试试这个:

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中,否则它不是指对象,而是指全局
DOMWindow
,据我所知,您希望将函数的返回值赋给对象的属性,并将对象本身传递给函数。这是正确的吗

你不可能一下子做到这一点。您必须将以下步骤分开:

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

obj.x.callback = dataCallback(obj.x);
obj.y.callback = dataCallback(obj.y);

是的,没有任何效果,因为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变量的引用:

查看您尝试执行的操作的逻辑-即使有可能这样做-它将导致无限递归。为了将
obj.x
传递到
dataCallback
,它必须调用
dataCallback
…这需要重新定义
obj.x
如果你解释一下你的最终目标是什么,人们会更容易帮助你。早上好?现在是下午6:59here@Kooilnc这里是下午1点。除了泡泡,你还知道世界上的其他地方。这个函数的返回值是
dataCallback
(函数).JSON是javascript中对象的文字符号,所以当您使用{/*properties/*}定义对象时这是一个JSON。好吧,也许我解释错了。在我的帖子中,我说过JSON是不可自引用的,所以纯JSON完全不可能在一个JSON块中实现作者所说的wnat。我的目标是提供另一种方式,在javascript中称之为Sharp变量,在JSO中我错误地称之为Sharp变量N、 很抱歉,作者也没有严格要求JSON。是的,从某种意义上说,我提供的方法完全没有用,因为它只在Firefox中工作,但实际上我们无法通过纯Javascript对象标记来实现目标@Neal的意思是,尽管有相似的语法和名称,但对象文本不是JSON。JSON是一种数据交换格式,其语法是JS对象文字的子集。许多人犯了错误,将对象文字称为JSON。有关更多信息:@Felix,我相信你在前面的问题上教过我这一点