Получить доступ к объекту из другой функции js
Переформулирую, пожалуй. Вот есть код:
token: '111',
run() {
this.addressSuggestionsInit();
},
completeFields($this, suggestionsData) {
let address = suggestionsData.data;
let container = $this.closest('[data-suggestions-container]');
let completeInputs = container.find('[data-equal-field-from]');
completeInputs.each(function() {
let input = $(this);
let name = input.attr('data-equal-field-from');
const value = address[name];
const type = address[name + TYPE];
let fullValue = '';
if ('street' === name || 'city' === name) {
fullValue = type && value ? `${type}. ${value}` : '';
}
if ('region' === name) {
const regionTypeFull = address.region_type_full;
fullValue = regionTypeFull && value ? `${value} ${regionTypeFull}` : '';
}
if (value) {
input.val(fullValue ? fullValue : value);
} else {
input.val('');
}
input.change();
});
$this.change();
},
addressSuggestionsInit(container = false) {
let self = this;
let $address = container ? $(`${container} [data-suggestions-address]`) : $('[data-suggestions-address]');
$address.each(function() {
let $this = $(this);
$this.suggestions({
count: 10,
type: 'ADDRESS',
minChars: 3,
token: self.token,
onSelect(suggestionsData) {
console.log('suggestionsData');
console.log(suggestionsData);
self.completeFields($this, suggestionsData);
},
addon: 'none',
});
});
},
};
доступ мне нужно получить к suggestionsData.
что я сделал:
- поместил коллбэк в месте инициализации этого скрипта, чтобы передать объект наружу.
suggest.run(function(suggestionsData) {
console.log('вызов из коллбэка' + suggestionsData.data);
});
- сам скрипт изменил следующим образом:
run(suggestion) {
this.addressSuggestionsInit();
this.suggestion = suggestion; //добавил коллбэк
},
- поместил коллбэк в то место, где идет работа с suggestionData:
onSelect(suggestionsData) {
console.log('suggestionsData');
console.log(suggestionsData);
this.suggestion(); // по моему замыслу это должен быть вызов коллбэка и передача его с параметром наверх, но тут исполнение скрипта прерывается ошибкой с сообщением о том, что this.suggestion is not a function
self.completeFields($this, suggestionsData);
},
буду признателен, если мне объяснят, что я делаю не так, и как надо получать доступ к свойствам объекта снаружи.
Ответы (2 шт):
Автор решения: Alexandr
→ Ссылка
Я не понимаю что у вас в примере написано, но по вашим комментариям я понял следующее:
//Есть некая функция, которая в процессе работы отдает объект (suggestionsData) в консоль.
let suggestionsData = { name : 'I am object'}
function printInConsole(suggestionsData, callback){
console.log(suggestionsData.name)
callback(suggestionsData)
}
//Как получить к этому объекту доступ из другой функции? Ваш колбек
function sayHi(suggestionsData){
//тут я получаю доступ к объекту 'suggestionsData'
console.log('Hi there!' , suggestionsData.name)
}
printInConsole(suggestionsData, sayHi)
Если я понял неправильно, пожалуйста, переформулируйте вопрос
Автор решения: Sanya H
→ Ссылка
const suggest = {
suggestion: null,
run(suggestion) {
//this.addressSuggestionsInit();
this.suggestion = suggestion;
},
onSelect(suggestionsData) {
console.log('suggestionsData');
console.log(suggestionsData);
this.suggestion(suggestionsData);
//self.completeFields($this, suggestionsData);
},
}
suggest.run(function(suggestionsData) {
console.log('вызов из коллбэка' + suggestionsData.data);
});
suggest.onSelect({data: ' someone'});