Показать сообщение отдельно
  #2 (permalink)  
Старый 23.03.2020, 22:07
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

Сообщение от rexton
Собственно вопрос в том, что при первом вызове из "*2" в отладчике показывает что у переменной b в прототипе нет метода setSelectсallback.
Это все потому, что вы прототип функции изменяете при её вызове.
JavaScript - интерпретируемый ЯП.

Сообщение от rexton
но когда я пытаюсь использовать значение переменной изнутри функции оно всегда равно 1
Вы, скорее всего, проводите манипуляции над свойством до того, как его значение будет перезаписано. Без упоминаемого кода сложно сказать, что не так.

Попробуйте так:
function someClass() {
    this.selectCallback = 1;
    
    if (!this.gFileList && window.gCurentPath) {
        this.__loadFileList(gCurentPath);
    }
};

someClass.prototype.gFileList = null;

someClass.prototype.__loadFileList = function (directoryPath) {
    if (!directoryPath) {
        return Promise.reject();
    }
    
    return getFilesAndFoldersList(directoryPath).then(res => {
        this.gFileList = res;
    });
};

someClass.prototype.setSelectCallback = function (value) {
    this.selectCallback = value;
};

window.addEventListener('load', function () {
    var someClassInstance = new someClass();
    
    someClassInstance.setSelectCallback(function (a) {
        // do something
        
        let c = a;
    });
});


P.S. от прямого изменения прототипа можно избавиться с помощью синтаксического сахара добавленного в ES6, т.е. объявить класс с помощью ключ. слова «class».

Последний раз редактировалось Nexus, 23.03.2020 в 22:13.
Ответить с цитированием