开发者

Javascript, can I pass a reference to a current object to function within an object literal definition?

开发者 https://www.devze.com 2023-03-01 14:10 出处:网络
Good Morning, I have a function that takes an options hash as it\'s parameter, can I call that function inside an object literal definition? Like this

Good Morning,

I have a function that takes an options hash as it's parameter, can I call that function inside an object literal definition? Like this

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

I hope my question makes sense. Perhaps I worded it incorrectly in the title. Anyways, if someone can straighten me out here I would truly appreciate it. Thanks for any tips or tricks.

Cheers,

~ck in San Diego


From what I understood is that you want to assign the return value of the function to a property of the object and passing the object itself to the function. Is this correct?

You cannot do this in one go. You have to separate the steps:

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

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


try this:

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();

in order to do dataCallback(this) you need to put it in an anon fn or else this does not refer to the object, it refers to the global DOMWindow


Yes, nothing works, because JSON is not self-referenceable, only Firefox now supports Sharp Variable in JSON so that you may write like this:

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

Note that Sharp Variable is only supported by some versoin of Firefox and will possibily be removed at future point, so use it at consideration. Syntax in Sharp Variable is extremely strict so that you should write "x:#1={" without any extra space in each character.

For reference of Sharp Variable: https://developer.mozilla.org/en/Sharp_variables_in_JavaScript

0

精彩评论

暂无评论...
验证码 换一张
取 消