JavaScript, могу ли я передать ссылку на текущий объект, чтобы функционировать в буквальном определении объекта?
-
26-10-2019 - |
Вопрос
Доброе утро,
У меня есть функция, которая принимает хэш с параметрами в качестве параметра, могу ли я назвать эту функцию внутри буквального определения объекта? Как это
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