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

StackOverflow https://stackoverflow.com/questions/5822062

Вопрос

Доброе утро,

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top