Получить доступ к объекту из другой функции 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.

что я сделал:

  1. поместил коллбэк в месте инициализации этого скрипта, чтобы передать объект наружу.
suggest.run(function(suggestionsData) {
     console.log('вызов из коллбэка' + suggestionsData.data);
});
  1. сам скрипт изменил следующим образом:
run(suggestion) {
    this.addressSuggestionsInit();
    this.suggestion = suggestion; //добавил коллбэк
},
  1. поместил коллбэк в то место, где идет работа с 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'});

→ Ссылка