Javascript, я могу передать ссылку на текущий объект, чтобы функционировать в пределах литерального определения объекта? - PullRequest
2 голосов
/ 28 апреля 2011

Доброе утро,

У меня есть функция, которая принимает хэш опций в качестве параметра, могу ли я вызвать эту функцию внутри литерального определения объекта?Вот так

 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 в Сан-Диего

Ответы [ 3 ]

3 голосов
/ 28 апреля 2011

Из того, что я понял, вы хотите присвоить возвращаемое значение функции свойству объекта и передать сам объект в функцию.Это правильно?

Вы не можете сделать это за один раз.Вы должны разделить шаги:

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

obj.x.callback = dataCallback(obj.x);
obj.y.callback = dataCallback(obj.y);
2 голосов
/ 28 апреля 2011

попробуйте это:

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

0 голосов
/ 28 апреля 2011

Да, ничего не работает, потому что JSON не имеет самоссылки, только Firefox теперь поддерживает Sharp Variable в JSON, так что вы можете написать так:

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 Variable поддерживается только некоторыми версиями Firefox и, возможно, будет удалена в будущем, поэтому используйте его при рассмотрении. Синтаксис в Sharp Variable очень строг, поэтому вы должны писать «x: # 1 = {» без лишних пробелов в каждом символе.

Для справки по переменной Sharp: https://developer.mozilla.org/en/Sharp_variables_in_JavaScript

...